加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如果“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,这样你就会得到错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读