gpt4 book ai didi

ruby - 如果 "if"语句位于子句末尾,为什么 ruby​​ 中的条件语句和赋值会失败?

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

为什么最后一条语句(语句末尾带有“if (tmp2 = foo)”)会失败?

def foo;5;end

# this one works
if (tmp = foo)
puts tmp.to_s
end

# why this one fails
puts tmp2.to_s if (tmp2 = foo) #=> undefined local variable or method ‘tmp2’ for main:Object

最佳答案

由于解析器的工作方式,它失败了。

从解析器的角度来看,变量 tmp2 从代码中首次分配它的位置一直存在到它超出范围的位置。为此,当(或如果)实际执行赋值时,只要解析器看到赋值(即它取决于代码中的赋值位置)并不重要。

编辑:扩展该位:

名称是局部变量还是方法调用由解析器决定。解析器仅根据它是否已经看到对该变量的赋值来做出该决定。所以当解析器在看到tmp2 = ...之前看到tmp2时,它决定这里的tmp2指的是一个方法。当这部分代码实际执行时,它会尝试调用不存在的方法 tmp2,因此会出现错误。

关于ruby - 如果 "if"语句位于子句末尾,为什么 ruby​​ 中的条件语句和赋值会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380331/

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