有没有办法为不同的参数编写不同的方法实现?像这样:
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模式匹配的东西
答案 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
但是不能使用相同数量的参数来编写不同的实现。