针对不同参数的不同实现

时间:2015-10-04 01:03:38

标签: ruby

有没有办法为不同的参数编写不同的方法实现?像这样:

class Foo
    def some_method("lorem")
        true
    end
    def some_method("ipsum")
        false
    end
end

a = Foo.new
a.some_method("lorem")
=> true
a.some_method("ipsum")
=> false

类似于Haskell模式匹配的东西

3 个答案:

答案 0 :(得分:2)

是的,这很容易。 Ruby支持双向条件,写成if / then / else和多路条件,写成case / when / then / else

class Foo
  def some_method(word)
    case word
    when 'lorem' then true
    when 'ipsem' then false
    end
  end
end

答案 1 :(得分:0)

如果您想避免分支条件,也可以使用Hash地图执行此操作:

class Foo
  WORDS = { "lorem" => true, "ipsem" => false }

  def some_method(word)
    WORDS[word]
  end
end

或者在您的特定情况下,一些简单的谓词逻辑可以做到,但可能无法扩展:

class Foo
  def some_method(word)
    word == "lorem"
  end
end

答案 2 :(得分:-2)

ruby​​不支持方法重载,因为它不使用数据声明。

我认为你最接近的事情就是使用一个开关检查数据类型,并在每个块中做一些不同的事情。

示例

 case item.class
   when MyClass
     # do something here
   when Array
     # do something different here
   when String
     # do a third thing
   end

但是不能使用相同数量的参数来编写不同的实现。