我有一个简单的类代码。它是:
def greeting
greeting = ARGV.shift
ARGV.each do |arg|
p "#{greeting}, #{arg}!"
end
end
我的愿望是简单输出“你好,查理!”和“你好,山姆!”基于存储在数组中的名称。但是,当我尝试在ruby中运行程序时,看起来我使用了return语句。
address_bloc :> ls
address_bloc.rb greeting.rb ruby
argv_test.rb models spec
address_bloc :> greeting.rb Yo Tommy Bob Sally
-bash: greeting.rb: command not found
address_bloc :> ruby greeting.rb Yo Sam Sean Bill
address_bloc :> ruby greeting.rb Yo Sam Sean Bill
答案 0 :(得分:4)
删除函数定义逻辑,如果这是您希望脚本执行的操作,只需将内容包含在顶层:
greeting = ARGV.shift
ARGV.each do |arg|
puts "#{greeting}, #{arg}!"
end
如果您想继续定义用于问候名单列表的通用功能,您也可以通过调用greeting
并将ARGV
的内容传递给它来执行此操作,如下所示:
def greeting(args)
greeting = args.shift
args.each do |arg|
puts "#{greeting}, #{arg}!"
end
end
greeting ARGV
但总的来说,如果它的参数更有意义,它是一个更好的函数,所以考虑做这样的事情:
def greet_list(greeting, name_list)
name_list.each do |arg|
puts "#{greeting}, #{arg}!"
end
end
greet_list ARGV.shift, ARGV