想象一下下面的代碼:有沒有比使用自定義的case語句更有用的方法來在Ruby中編寫它?
class SimpleLetter
def values
("a" .. "z").to_a
end
def ===(other)
values.include?(other)
end
end
class Vowel < SimpleLetter
def values
["a","e","i","o","u"]
end
end
class Consonant < SimpleLetter
def values
super - Vowel.new.values
end
end
objects = ("a" .. "f").to_a + (1 .. 5).to_a
objects.each do |letter|
case letter
when Vowel.new
puts "#{letter} it's a vowel"
when Consonant.new
puts "#{letter} it's a consonant"
else
puts "#{letter} it's something else"
end
end
我可以選擇任何其他類,而不是,我只是用它們作爲一個例子。我非常喜歡Scala的match
和提取器,我認爲這可能是在Ruby中編寫相同的東西的一種很好的方式。有沒有更好的方式來寫上述,而不必實例化新的對象,所以我可以調用他們的===
方法?
只是爲了避免不必要的崗位,是的,我知道我能做到這一點:
case letter
when ["a","e","i","o","u"].include?(letter)
# ...
end
使用類方法看起來比我更好的變種很多。我不知道我們可以定義'==='來處理類作用域。 – Geo 2011-05-23 20:04:43