Ruby知道'myvar'是myvar = 0中的变量,如果为false

时间:2012-01-12 17:51:34

标签: ruby variables methods declaration

我正在学习Ruby,我喜欢和irb一起玩,以发现新功能和技巧。今天我在玩变量和方法,因为我想知道哪一个在另一个之前优先考虑。在我尝试这一切之前一切都很好看:

def test
   puts "hello"
end

test = "bye" if false

puts test

我希望这会返回"hello",但事实并非如此。所以,我认为解析器将'test'视为变量而不是方法。我有两个问题:

  1. 我的假设是否正确?
  2. 有没有办法知道某事是变量还是方法?一些方法,如test.is_variable?

2 个答案:

答案 0 :(得分:3)

test = "hello" if false
p test #=> nil

无论如何都创建了局部变量test(默认值为nil),并且假定局部变量掩盖了具有相同名称的方法,那就是你得到的值。就在一小时前,someone被主题的微妙变化所困扰。你不认为这只发生在单行条件下:

if false
  test = "hello" 
end
p test #=> nil

这是因为Ruby在解析变量时定义变量(而不是在执行变量时)。

答案 1 :(得分:0)

至少有两种方法可以提供帮助:methodslocal_variables。我不建议在现实世界的程序中使用它们,但在学习Ruby时它们可能很有用。