我有一个功能,我从用户那里获得输入
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_url是'' - 空字符串。
$web_url =''
puts "url je:#{$web_url}"
get_single_argument($web_url,"web url")
puts "url je:#{$web_url}"
答案 0 :(得分:2)
Don't use global variables。而是让get_single_argument
返回值:
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
和
web_url = get_single_argument("web url")
答案 1 :(得分:2)
您可以在方法中使用String.replace
。而不是
argument = STDIN.gets.chomp
你可以写
argument.replace STDIN.gets.chomp
答案 2 :(得分:1)
在此之前:
argument = STDIN.gets.chomp
局部变量argument
和全局变量$web_url
确实引用了计算机内存中的同一个对象。执行该行后,变量argument
现在引用的是与$web_url
引用的对象不同的对象。
正如霍华德所提到的,使用argument.replace(..)
将修改内存中的String对象,而不会破坏变量与内存中对象之间的链接。
通常,更好的方法是不使用全局变量,但让方法返回用户输入。