我对ruby很新,我正在尝试使用rails框架编写Web应用程序。通过阅读,我看到这样的方法被称为:
some_method "first argument", :other_arg => "value1", :other_arg2 => "value2"
您可以传递无限数量的参数。
如何在ruby中创建一个可以这种方式使用的方法?
感谢您的帮助。
答案 0 :(得分:17)
这是有效的,因为如果以这种方式调用方法,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 )
答案 1 :(得分:3)
这实际上只是一个以哈希为参数的方法,下面是一个代码示例。
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
答案 2 :(得分:1)
也许* 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。
答案 3 :(得分:0)
您可以将最后一个参数作为可选哈希来实现:
def some_method(x, options = {})
# access options[:other_arg], etc.
end
但是,在Ruby 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]
)。新语法的一个缺点是你不能(据我所知)轻松地将所有关键字参数发送到其他方法,因为你没有代表它们的哈希对象。
值得庆幸的是,调用这两种方法的语法是相同的,因此您可以在不破坏良好代码的情况下从一种方法更改为另一种方法。