3

エレガントな書き方はありますか

  if o.class == ClassA or o.class == ClassB or o.class == ClassC

私は特にクラスを比較するつもりはありません。これはブール値を使って何かをしていない例にすぎないので、次のようなことはできません。

  if o.class == (ClassA or ClassB or ClassC)

他の例は

  if string == "asdf" or string == "1337"

私が見つけた唯一のものは

  if [ClassA, ClassB, ClassC].include? o.class

また

  if ["asdf", "1337"].include? string
4

2 に答える 2

5

最も洗練されたソリューションは、すでに提供している「include?」を使用しているソリューションだと思います。

多様性のために、次の場合にケースを使用するオプションもあります。

case o
  when ClassA, ClassB, ClassC
  ...

もう1つの選択肢は、「含める」よりも少し読みやすいと思います。独自の「in?」を作成することです。例:

class Object
  def in?(array)
    array.include? self
  end
end

そして、あなたは使用することができます

if o.class.in? [ClassA, ClassB, ClassC]
于 2012-07-17T15:42:38.180 に答える
1

どうcaseですか?これはひどく従来の使用法ではありませんが、確かによりエレガントです。

case o
when "asdf", "1337"
  puts "Hi!"
when Class1, Class2
  puts "Bye!"
end

caseどちらが===平等との両方をテストするのでしょうか?関係、およびリスト構文を持っている、それはこれらの種類の状況のた​​めに非常にエレガントです。

于 2012-07-17T15:42:48.587 に答える