我對ruby非常陌生,我試圖用rails框架編寫一個web應用程序。通過閱讀,我看到了這樣的方法:Ruby多個命名參數
some_method "first argument", :other_arg => "value1", :other_arg2 => "value2"
你可以傳遞無限數量的參數。
你如何在Ruby中創建一個方法,可以以這種方式使用的?
感謝您的幫助。
我對ruby非常陌生,我試圖用rails框架編寫一個web應用程序。通過閱讀,我看到了這樣的方法:Ruby多個命名參數
some_method "first argument", :other_arg => "value1", :other_arg2 => "value2"
你可以傳遞無限數量的參數。
你如何在Ruby中創建一個方法,可以以這種方式使用的?
感謝您的幫助。
如果您以這種方式調用該方法,則Ruby會採用值爲Hash
的方法,因此可行。
這裏是你如何定義一個:
def my_method(value, hash = {})
# value is requred
# hash can really contain any number of key/value pairs
end
而且你可以這樣調用它:
my_method('nice', {:first => true, :second => false})
或者
my_method('nice', :first => true, :second => false)
這其實只是有一個方法散列作爲參數,下面是一個代碼示例。
def funcUsingHash(input)
input.each { |k,v|
puts "%s=%s" % [k, v]
}
end
funcUsingHash :a => 1, :b => 2, :c => 3
詳細瞭解這裏的哈希http://www-users.math.umd.edu/~dcarrera/ruby/0.3/chp_03/hashes.html
也許這* ARGS可以幫助您?
def meh(a, *args)
puts a
args.each {|x| y x}
end
結果這種方法是
irb(main):005:0> meh(1,2,3,4)
1
--- 2
--- 3
--- 4
=> [2, 3, 4]
但我更喜歡在我的腳本this method。
可以使最後一個參數是一個可選的哈希以實現:
def some_method(x, options = {})
# access options[:other_arg], etc.
end
然而,在紅寶石2.0.0,一般最好使用一個新的功能,稱爲keyword arguments:
def some_method(x, other_arg: "value1", other_arg2: "value2")
# access other_arg, etc.
end
使用新的語法,而不是使用哈希的優點是:
other_arg
而不是options[:other_arg]
)。新語法的一個缺點是你不能(就我所知)將所有關鍵字參數發送給其他方法,因爲你沒有代表它們的哈希對象。
謝天謝地,調用這兩種類型的方法的語法是相同的,所以您可以在不破壞良好的代碼的情況下從一個更改爲另一個。