Ruby知道';myvar';如果为false,则为myvar=0中的变量
我正在学习Ruby,我喜欢玩Ruby知道';myvar';如果为false,则为myvar=0中的变量,ruby,variables,methods,declaration,Ruby,Variables,Methods,Declaration,我正在学习Ruby,我喜欢玩irb来发现新的特性和技巧。今天我在玩变量和方法,因为我想知道哪一个优先于另一个。在我尝试这个之前,一切看起来都很好: def test puts "hello" end test = "bye" if false puts test 我本以为它会返回“hello”,但事实并非如此。因此,我假设解析器将“test”视为变量,而不是方法。我有两个问题: 我的假设正确吗 有没有办法知道什么是变量还是方法?一些方法,如test.is\u variable? 局部
irb
来发现新的特性和技巧。今天我在玩变量和方法,因为我想知道哪一个优先于另一个。在我尝试这个之前,一切看起来都很好:
def test
puts "hello"
end
test = "bye" if false
puts test
我本以为它会返回“hello”,但事实并非如此。因此,我假设解析器将“test”视为变量,而不是方法。我有两个问题:
test.is\u variable?
test
无论如何都会被创建(默认值为nil
),如果局部变量覆盖了同名的方法,则得到的值就是这个值。就在一小时前,我被一个微妙的主题变化所困扰。你不认为这只发生在单行条件下吗
if false
test = "hello"
end
p test #=> nil
这是因为Ruby在解析变量时(而不是在执行变量时)定义变量。至少有两种方法可以提供帮助:
方法
和局部变量
。我不建议在现实世界的程序中使用它们,但它们在学习Ruby时可能很有用。即使没有test=“bye”if false
行,代码也会返回hello
nil
,因为test
方法返回puts(“hello”)的结果,即nil
@goodough你是对的。我也试过了,没有“puts”。谢谢你的评论:)我不明白你说的“至少有两种方法有用”是什么意思?还有其他方法,例如,私有方法
,公共方法
,全局变量
等等。如果你想知道“至少有两种”。局部变量也被认为是方法吗?这就是我所惊讶的。局部变量是在解析时定义的。真的没什么了。
if false
test = "hello"
end
p test #=> nil