我想知道如何使用Ruby符号(例如:foo
)作为函数中的选项(而不是选项哈希)。
示例:
round(28.53, :floor)
get_data(:age)
我如何创建一个接受这些参数的函数?
答案 0 :(得分:1)
如果您不需要处理可变数量的参数,它就像任何其他参数一样:
def round(number, rounds)
case rounds
when :floor
number.floor
when :ceil
number.ceil
when :round
number.round
else
raise ArgumentError, "unknown rounding mode: #{rounds.inspect}"
end
end
round(28.53, :floor) #=> 28
round(28.53, :ceil) #=> 29
round(28.53, :round) #=> 29
round(28.53, :foo) #=> ArgumentError: unknown rounding mode: :foo
答案 1 :(得分:0)
这是一个问题吗?
def puts_class param
puts param.class
end
puts_class :asd
=>
Symbol
实际上,符号从未被假定为Ruby方法中的选项。这是关于哈希:
some_method(1,2, param: :value, param2: value2) # curly braces omitted
# equal to
some_method(1,2, {param: value, param2: value2})
答案 2 :(得分:0)
假设您要向您的方法发送多个选项。并且如果存在选项,你想要做某事(在这种情况下让我们打印它)否则什么也不做/不打扰
def meth( opt = {} )
opt.keys.each { |o| puts opt[0]
end
# pass two options
meth(:name => 'Ruby', :floor => 23.5) #=> Ruby, 23.5
#pass one option
meth(:name => 'Rails') #=> Rails