Ruby 如何为函数中的全局变量赋值?
我有一个从用户那里获取输入的函数Ruby 如何为函数中的全局变量赋值?,ruby,Ruby,我有一个从用户那里获取输入的函数 def get_single_argument(argument,name) begin puts "Type #{name}: " argument = STDIN.gets.chomp puts "#{name} --> #{argument} OK??" happy = STDIN.gets.downcase.chomp end until (happy.strip
def get_single_argument(argument,name)
begin
puts "Type #{name}: "
argument = STDIN.gets.chomp
puts "#{name} --> #{argument} OK??"
happy = STDIN.gets.downcase.chomp
end until (happy.strip[0,1].to_s =='y' )
end
但是当我调用这个函数时,参数是一个全局变量,全局变量不会被更新。如何为作为函数参数传递的全局变量赋值$web\u url为“”-空字符串
$web_url =''
puts "url je:#{$web_url}"
get_single_argument($web_url,"web url")
puts "url je:#{$web_url}"
。相反,使get\u single\u参数
返回以下值:
def get_single_argument(name)
happy = "no"
until happy.strip[0,1].to_s =='y'
puts "Type #{name}: "
argument = STDIN.gets.chomp
puts "#{name} --> #{argument} OK??"
happy = STDIN.gets.downcase.chomp
end
argument
end
及
。相反,使get\u single\u参数
返回以下值:
def get_single_argument(name)
happy = "no"
until happy.strip[0,1].to_s =='y'
puts "Type #{name}: "
argument = STDIN.gets.chomp
puts "#{name} --> #{argument} OK??"
happy = STDIN.gets.downcase.chomp
end
argument
end
及
您可以在方法中使用
String.replace
。而不是
argument = STDIN.gets.chomp
你可以写
argument.replace STDIN.gets.chomp
您可以在方法中使用
String.replace
。而不是
argument = STDIN.gets.chomp
你可以写
argument.replace STDIN.gets.chomp
在此行之前:
argument = STDIN.gets.chomp
局部变量参数
和全局变量$web\u url
引用了计算机内存中的同一对象。执行该行后,变量参数
现在引用的对象与$web\u url
引用的对象不同
正如Howard提到的,使用argument.replace(..)
将修改内存中的字符串对象,而不会中断变量和内存中对象之间的链接
通常,更好的方法不是使用全局变量,而是让方法返回用户输入。在这一行之前:
argument = STDIN.gets.chomp
局部变量参数
和全局变量$web\u url
引用了计算机内存中的同一对象。执行该行后,变量参数
现在引用的对象与$web\u url
引用的对象不同
正如Howard提到的,使用argument.replace(..)
将修改内存中的字符串对象,而不会中断变量和内存中对象之间的链接
一般来说,更好的方法是不使用全局变量,而是让方法返回用户输入。谢谢您的解释,但我仍然不明白为什么在执行该行后它会引用其他对象。因为您在使用赋值(=)运算符时告诉
argument
引用其他对象。如果你写的是argument=1
,你还会期望argument
和$web\u url
引用同一个对象吗?哦,好的,我不清楚。我不明白为什么在赋值给参数后的代码中全局变量的值没有更改。感谢您的解释,但我仍然不明白为什么在执行该行后它引用了其他对象。因为您在使用赋值(=)运算符时告诉参数
引用其他对象。如果你写的是argument=1
,你还会期望argument
和$web\u url
引用同一个对象吗?哦,好的,我不清楚。我不明白为什么在赋值给参数后的代码中全局变量的值没有改变。