ruby – 解析与操作的可变范围和顺序:“if”中的赋值
发布时间:2020-12-17 04:00:55 所属栏目:百科 来源:网络整理
导读:我的理解是,行前面的if语句在行前面的代码之前进行了评估: 'never shown' if (false) 并且可以在if语句中进行赋值. 'shown' if (value = 'dave is king')value #= "dave is king" 并且,当分配不存在的变量时,将创建该变量.事先不需要它存在.这是真的? 如果
我的理解是,行前面的if语句在行前面的代码之前进行了评估:
'never shown' if (false) 并且可以在if语句中进行赋值. 'shown' if (value = 'dave is king') value #=> "dave is king" 并且,当分配不存在的变量时,将创建该变量.事先不需要它存在.这是真的? 如果所有这些假设都成立,为什么会失败呢? error_array << error if (error = import_value(value)) #=> undefined local variable or method `error' for 它在数组推右前分配给错误?我想了解什么时候进行评估. 这个确实有效: if (error = import_value(value)) error_array << error end 现在我真的很困惑. 解决方法
它只会在您尝试分配文字值时发生,如果您调用它起作用的函数.
def foo(a) a end p 'not shown' if(value = foo(false)) p 'shown' if(value = foo(true)) # This outputs a Warning in IRB p 'shown' if(value = false) (irb):2: warning: found = in conditional,should be == 如果打开调试(-d),您将看到有关已使用变量值的警告 warning: assigned but unused variable - value 这“有效”,因为语句确实评估为true,只要涉及到它,允许它前面的代码运行. 这里发生的是if()当用作修饰符时它有自己的绑定范围或上下文.因此,在if之外永远不会看到赋值,因此执行起来没有任何意义.这与控制结构不同,因为if语句所采用的块也与赋值在同一范围内,而if修饰符之前的行不在if的范围内. 换句话说,这些并不等同. if a = some(value) puts a end puts a if(a = some(value)) 前者已经将if放在if的范围内,后者将范围放在了范围之外,因此具有不同的绑定(ruby称之为上下文). Ruby Order of Operations (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |