检查变量是否是Ruby中的字符串

时间:2011-10-13 04:18:30

标签: ruby idioms typechecking

还有比以下更惯用的东西吗?

foo.class == String

6 个答案:

答案 0 :(得分:172)

我认为您正在寻找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

答案 1 :(得分:24)

更多的鸭子打字方法就是说

foo.respond_to?(:to_str)

to_str表示对象的类可能不是String的实际后代,但是对象本身非常像字符串(stringy?)。

答案 2 :(得分:20)

你可以这样做:

foo.instance_of?(String)

更普遍:

foo.kind_of?(String)

答案 3 :(得分:6)

foo.instance_of? String

foo.kind_of? String 

如果您只关心它是否来自String其继承链上的某个地方

答案 4 :(得分:3)

除了其他答案之外,Class定义方法===来测试对象是否是该类的实例。

  • o.class 类o。
  • o.instance_of? c 确定 o.class == c
  • o.is_a? c 是o或其任何子类的实例吗?
  • o.kind_of? c * is_a?*
  • 的同义词 对于类或模块,
  • c === o ,确定是否* o.is_a? c *( String ===“s”返回true)

答案 5 :(得分:-1)

我认为更好的方法是创建一些谓词方法。 这也将保存您的“单点控制”。

class Object
 def is_string?
   false
 end
end

class String
 def is_string?
   true
 end
end

print "test".is_string? #=> true
print 1.is_string?      #=> false

鸭子打字方式越多;)