条件“if”修饰符中的Ruby变量赋值
发布时间:2020-12-16 19:34:57 所属栏目:百科 来源:网络整理
导读:我有一个关于 Ruby解释器如何分配变量的问题: 我经常使用这个: return foo if (foo = bar.some_method) some_method返回一个对象或nil. 但是,当我尝试这个: return foo if (true (foo = bar.some_method)) 我得到:NameError:未定义的局部变量或方法foo
我有一个关于
Ruby解释器如何分配变量的问题:
我经常使用这个: return foo if (foo = bar.some_method) some_method返回一个对象或nil. 但是,当我尝试这个: return foo if (true && (foo = bar.some_method)) 我得到:NameError:未定义的局部变量或方法foo for main:Object. 导致第二行出错的第一行和第二行之间的评估有何不同? 解决方法
Read it carefully:
另一个常见的令人困惑的情况是在使用修饰符时: p a if a = 0.zero? 而不是打印true,您会收到NameError,“未定义的局部变量或方法’a’”.由于Ruby首先解析了if的左边,并且还没有看到对它的赋值,因此假定你想调用一个方法.然后,Ruby会将赋值视为a,并假设您正在引用本地方法. 混淆来自表达式的无序执行.首先分配局部变量,然后尝试调用不存在的方法. 正如你所说 – 如果(foo = bar.some_method)没有返回foo并返回foo if(true&&(foo = bar.some_method))将起作用,我敢打赌,如果你没有,它将无法工作在这一行之前定义foo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |