我正在学习Ruby,我喜欢和irb
一起玩,以发现新功能和技巧。今天我在玩变量和方法,因为我想知道哪一个在另一个之前优先考虑。在我尝试这一切之前一切都很好看:
def test
puts "hello"
end
test = "bye" if false
puts test
我希望这会返回"hello"
,但事实并非如此。所以,我认为解析器将'test'视为变量而不是方法。我有两个问题:
test.is_variable?
答案 0 :(得分:3)
test = "hello" if false
p test #=> nil
无论如何都创建了局部变量test
(默认值为nil
),并且假定局部变量掩盖了具有相同名称的方法,那就是你得到的值。就在一小时前,someone被主题的微妙变化所困扰。你不认为这只发生在单行条件下:
if false
test = "hello"
end
p test #=> nil
这是因为Ruby在解析变量时定义变量(而不是在执行变量时)。
答案 1 :(得分:0)
至少有两种方法可以提供帮助:methods
和local_variables
。我不建议在现实世界的程序中使用它们,但在学习Ruby时它们可能很有用。