相关疑难解决方法(0)

基于Ruby语法的未定义局部变量

在以下Ruby代码中,

#! /usr/bin/env ruby
x = true
y = x and z = y
puts "z: #{z}"
Run Code Online (Sandbox Code Playgroud)

它将z: true按预期输出.

但在下面的一个中,我希望它具有相同的行为:

#! /usr/bin/env ruby
x = true
z = y if y = x
puts "z: #{z}"
Run Code Online (Sandbox Code Playgroud)

它导致了

未定义的局部变量或方法'y'表示main:Object(NameError)

这是为什么?

我理解我正在做一个赋值,并隐式检查赋值以确定是否运行z = y.我也明白,如果我添加y的声明y = nil,就x = 5在行之后,它将按预期传递并运行.

但是,期望语言if首先评估部分然后评估其内容,并且第二块代码与第一块代码的行为相同,这是不正确的?

ruby

7
推荐指数
1
解决办法
135
查看次数

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

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

我经常使用这个:

return foo if (foo = bar.some_method)
Run Code Online (Sandbox Code Playgroud)

some_method返回一个对象或nil.

但是,当我尝试这个:

return foo if (true && (foo = bar.some_method))
Run Code Online (Sandbox Code Playgroud)

我得到:NameError:未定义的局部变量或方法foo for main:Object.

导致第二行出错的第一行和第二行之间的评估有何不同?

ruby if-statement local-variables variable-assignment

2
推荐指数
1
解决办法
1356
查看次数