在Ruby方法中使用全局变量作为参数

时间:2019-01-23 05:10:52

标签: ruby variables

我正在学习有关Udemy的Ruby课程,我试图了解为什么此代码有效。它需要任意两个数字并将它们相乘。

def multiply(first_num, second_num)
  first_num.to_f * second_num.to_f
end

puts "Enter the first number"
first_number = gets.chomp
puts "Enter the second number"
second_number = gets.chomp

puts "The first number multiplied by the second number is #{multiply(first_number, second_number)}"

该方法设置两个参数,然后使用它们。然后存储两个数字,一个在first_number中,一个在seconds_number中。在最终打印中,使用first_number和second_number代替first_num和second_num代替使用first_numsecond_num。我希望代码会失败,因为它没有在方法中使用初始参数。为什么行得通?

编辑:我最初的问题提到了全局变量,我对其进行了编辑以删除那些引用,以及提到的其他使问题引起困惑的内容。问题也得到了解答。我真正想问的是:“为什么一个方法中不包含两个变量,而在方法中用作参数?”我不知道那是怎么回事。感谢@sawa使我挺拔,并教给我一些我还没学过的Ruby知识。

1 个答案:

答案 0 :(得分:3)

您似乎误解了如何读取和执行程序。特别是,您似乎对调用方法的时间有错误的认识。

执行脚本时,在脚本的顶部,该方法multiply定义的,此时未执行(仅在调用该方法时执行方法(带有特定参数)。

然后根据控制台的输入设置 local 变量,而不是全局变量first_numbersecond_number

然后,在puts的参数中,方法multiply调用,参数为first_numbersecond_number

multiply的方法执行(不是定义)中,给定的first_numbersecond_number被分配给first_num和{{1 }},只能在方法执行期间访问。

计算出的值从方法second_num返回,并放在multiply参数的#{}部分中。在那里,方法puts应用于该值,并成为输出内容的一部分。