如何将可选参数传递给Ruby方法?

时间:2012-09-11 17:07:16

标签: ruby watir watir-webdriver

我正在使用Ruby进行一些Watir-webdriver测试,似乎无法使用以下代码。我想将一个可选的validation参数传递给log_activity方法。

def log_activity (type, *validation)
    #do something
end

我将以下参数传递给方法:

log_activity("license", 1)

我希望validation == 1为真,但这是假的:

puts validation.empty?
-> false

puts validation
-> 1

if validation == 1
    puts "validation!!!!"
else
    puts "WTF"
end
-> WTF

我做错了什么?

忘记提及,我正在使用ruby 1.9.3

3 个答案:

答案 0 :(得分:3)

*validation是一个包含之后的第二个和所有参数的数组。鉴于它是一个数组,你看到的结果是有道理的。您想检查* validation数组中的第一个元素。

或者,如果您只获得一个可选参数,则可以执行以下操作:

def log_activity (type, validation=nil)
    #do something
end

然后validation将是你传入的任何内容。

答案 1 :(得分:0)

当你使用* args作为Ruby中的最后一个参数时,args是一个数组。

不幸的是,在Ruby 1.8上,array.to_s == array.join(“”)

尝试

if validation == [1]

if validation.first == 1

答案 2 :(得分:0)

阅读“Method Arguments In Ruby”并查看“可选参数”。我发现它非常方便。

我正在粘贴有用的内容:

  

可选参数

     

如果你想在运行时决定你将为方法提供多少(如果有的话)参数,Ruby允许你这样做。定义方法时需要使用特殊表示法,例如:

def some_method(*p)
end
  

您可以使用任意数量的参数(包括无)调用上述方法,例如:

some_method
  

some_method(25)
  

some_method(25,"hello", 45, 67)
  

所有这些都可行。如果没有提供参数,那么p将是一个空数组,否则,它将是一个包含传入的所有参数值的数组。