如何定义一个方法,该方法可以接受2个参数,但只能使用1,另一个默认值?

时间:2014-01-27 06:19:52

标签: ruby

简短的例子。

def yay(a, b = "1")
value  = a + b
return value
end

我希望能够做到这一点

something.yay(2)

并返回3,并执行此操作

something.yay(2,3)

并获得5。

提前致谢!

3 个答案:

答案 0 :(得分:2)

你已经拥有它,我认为唯一的问题是数据类型。

尝试:

def yay(a, b = 1)
  a + b
end

或者,如果此方法仅对整数类型进行操作,则可以使用to_i将两个参数转换为整数:

def yay(a, b = "1")
  a.to_i + b.to_i
end

答案 1 :(得分:1)

使用Fixnum文字,而不是字符串文字:

class Something
  def yay(a, b = 1) # <----
    a + b # You don't need `return`: the last value evaluated is returned.
  end
end
something = Something.new
something.yay(2)
# => 3
something.yay(2, 3)
# => 5

答案 2 :(得分:0)

我发现以下用于此类的一般用途:

def foo(*a)
  ## define default vals
  params = {'param1_name' => 'def_val_1','param2_name' => 
'def_val_2','param3_name' => 'def_val_3'}
  params.each_with_index do |(key_,val_), ind_|
    params[key_] = ( a.first[ind_].nil? ? val_ : a.first[ind_])
    puts params[key_]
  end

end

当调用函数时,如果你想要一个默认值

,则为nil
foo (['path' ,nil, 'path3' ])
=>
path
def_val_2
path3