如果“if”语句位于子句的末尾,为什么ruby中的条件语句和赋值会
发布时间:2020-12-17 03:33:37 所属栏目:百科 来源:网络整理
导读:为什么最后一个语句(语句末尾的“if(tmp2 = foo)”)失败? def foo;5;end# this one worksif (tmp = foo) puts tmp.to_send# why this one failsputs tmp2.to_s if (tmp2 = foo) #= undefined local variable or method ‘tmp2’ for main:Object 解决方法
为什么最后一个语句(语句末尾的“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,这样你就会得到错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |