gpt4 book ai didi

crystal-lang - 为什么 Crystal 用于迭代的宏语法与 Crystal 的其余部分不同

转载 作者:行者123 更新时间:2023-12-05 00:13:52 29 4
gpt4 key购买 nike

来自 Ruby 世界的我立刻明白为什么 Crystal 选择不实现 for方法。但后来我惊讶地发现 Crystal 确实实现了 for宏的方法。我更惊讶地发现宏不允许可枚举( .each 等)语法(即 {% ["one", "two", "three"].each do |value| %} 不是有效的宏语法)。

这种语法差异是否有逻辑原因?答案可能很简单~“因为开发人员认为宏语法看起来像 x,而非宏语法看起来像 y”,但我猜还有更多的东西(任意语法不一致似乎一个缺陷)。

谢谢!

最佳答案

主要原因是解析器解析foo.bar do |arg| ... end的时候,它期望 |arg| 之后的表达式,不是 %} ,这是一个解析错误。因此,为了实现这一点,我们需要增强解析器(这已经非常复杂)以将其考虑在内。 for是因为这个而决定的,也是为了明确它不是普通的 Crystal 而是不同的东西(它是 Crystal 和标准库的解释子集)。

另一个原因是如果each和其他迭代方法是允许的,为什么不whileuntil ?这可能允许宏中的无限循环,只有 for不可能,因此您可以保证宏完成执行。鉴于我们有 run,这...实际上不是真的宏里面。

所以我认为我不反对更改语言以允许 each , each_with_index等,在宏内部,并允许该语法,并最终删除 for来自宏语言。在这个方向上打开一个请求这个问题的问题是一个很好的方法。

关于crystal-lang - 为什么 Crystal 用于迭代的宏语法与 Crystal 的其余部分不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48037084/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com