gpt4 book ai didi

ruby - 为什么 '[f x[1]]' 不合语法,而 '[1 + x[1]]' 是?

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:59 24 4
gpt4 key购买 nike

对于数组x,语法表达式如下:

  • 将 x[1]
  • [puts(x[1])]
  • [1 + x[1]]

但是这个:

  • [puts x[1]]

解析失败:

syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('

为什么解析器不能理解这个语法?

最佳答案

我相信这种解析行为是故意的——不是错误。这是 Ruby 允许省略括号的一个不幸的副作用。这段代码当然没问题:

def f x, y=0
x + y
end

f 2 # 2
f 2, 3 # 5

但是这段代码的结果是什么?

[f 2, 3]

[2,3] 还是 [5]?为了让语法分析器处理这段代码,它需要了解方法的多样性。但是因为 Ruby 是动态的,在实际执行方法调用之前无法确定。

与其允许模棱两可的情况,这肯定会在运行时导致令人惊讶的情况,设计师选择了在解析期间(仍然令人惊讶,但)容易修复的错误。

注意:您仍然可以争辩说,在它是最后一个元素的情况下没有歧义

[3, f 2]
# should be [3, 2]

但我可以想象,如果 Ruby 让我写那个,然后当我在数组末尾添加一个元素时用语法错误打我一巴掌,我会 panic 。我可以理解根本不允许在数组中省略括号的决定。

关于ruby - 为什么 '[f x[1]]' 不合语法,而 '[1 + x[1]]' 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47293587/

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