Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby知道';myvar';如果为false,则为myvar=0中的变量_Ruby_Variables_Methods_Declaration - Fatal编程技术网

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

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? 局部

我正在学习Ruby,我喜欢玩
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