gpt4 book ai didi

条件 "if"修饰符中的 Ruby 变量赋值

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

我有一个关于 Ruby 解释器如何分配变量的问题:

我经常使用它:

return foo if (foo = bar.some_method)

其中 some_method 返回一个对象或 nil。

但是,当我尝试这样做时:

return foo if (true && (foo = bar.some_method))

我得到:NameError: undefined local variable or method foo for main:Object.

导致第二行错误的第一行和第二行之间的评估差异是什么?

最佳答案

Read it carefully :

另一个常见的令人困惑的情况是使用修饰符 if 时:

p a if a = 0.zero?

您没有打印true,而是收到NameError,“未定义的局部变量或方法'a'”。由于 Ruby 首先解析 if 左边的裸露 a,并且还没有看到对 a 的赋值,它假定你想调用一个方法。然后,Ruby 会看到对 a赋值,并假设您正在引用一个本地方法

困惑来自表达式的乱序执行首先将局部变量赋值给然后您尝试调用一个不存在的方法。

如您所说 - 无 return foo if (foo = bar.some_method)return foo if (true && (foo = bar.some_method)) 将起作用,我敢打赌,如果你没有在这一行之前定义 foo ,它就不会工作。

关于条件 "if"修饰符中的 Ruby 变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740291/

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