我正在使用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
答案 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
将是一个空数组,否则,它将是一个包含传入的所有参数值的数组。