使用Ruby符号作为选项

时间:2013-09-06 09:23:19

标签: ruby symbols

我想知道如何使用Ruby符号(例如:foo)作为函数中的选项(而不是选项哈希)。

示例:

round(28.53, :floor)
get_data(:age)

我如何创建一个接受这些参数的函数?

3 个答案:

答案 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