2

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

私は何が間違っているのですか?

言及するのを忘れて、私はルビー1.9.3を使用しています

4

3 に答える 3

3

*validation is an array that includes the second and all arguments afterwards. Given that it is an array, the results you see make sense. You want to check the first element in the *validation array.

Alternatively, if you will only get one optional argument, you can do:

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

Then validation will be whatever you passed in.

于 2012-09-11T17:12:31.193 に答える
1

「 Rubyのメソッド引数」を読み、「オプションの引数」を見てください。とても便利だと思いました。

便利なコンテンツを貼り付けています。

オプションの引数

実行時にメソッドに提供する引数がいくつあるかを決定したい場合は、Rubyでそれを行うことができます。メソッドを定義するときは、特別な表記を使用する必要があります。例:

def some_method(*p)
end

上記のメソッドは、任意の数の引数(なしを含む)を使用して呼び出すことができます。例:

some_method

また

some_method(25)

また

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

それらはすべて機能します。引数が指定されていない場合はp空の配列になり、そうでない場合は、渡されたすべての引数の値を含む配列になります。

于 2012-09-11T17:36:08.337 に答える
0

when you use *args as the last argument in Ruby, args is an array.

Unfortunately for you, on Ruby 1.8, array.to_s == array.join("")

Try either

if validation == [1]

or

if validation.first == 1
于 2012-09-11T17:11:13.000 に答える