web-dev-qa-db-ja.com

変数がRubyの文字列かどうかを確認します

以下より慣用的なものはありますか?

foo.class == String
109
davidchambers

instance_of?を探していると思います。 is_a?およびkind_of?は、派生クラスのインスタンスに対してtrueを返します。

class X < String
end

foo = X.new

foo.is_a? String         # true
foo.kind_of? String      # true
foo.instance_of? String  # false
foo.instance_of? X       # true
175
Candide

もっとカモタイピングのアプローチは言うことです

foo.respond_to?(:to_str)

to_strは、オブジェクトのクラスが実際のStringの子孫ではないことを示しますが、オブジェクト自体は文字列に非常に似ています(文字列?)。

24
Andrew Grimm

できるよ:

foo.instance_of?(String)

より一般的な:

foo.kind_of?(String)
21
Federico Builes
foo.instance_of? String

または

foo.kind_of? String 

Stringの継承チェーンのどこかから派生したものかどうかだけを気にする場合

6
Matthew

他の答えに加えて、Classはメソッド===を定義して、オブジェクトがそのクラスのインスタンスであるかどうかをテストします。

  • o.class oのクラス。
  • o.instance_of?cは、o.class == cかどうかを決定します
  • o.is_a?c oはcのインスタンスまたはそのサブクラスのいずれかですか?
  • o.kind_of?c * is_a?*の同義語
  • c === oクラスまたはモジュールの場合、* o.is_a? c *(String === "s"はtrueを返します)
3
steenslag