Проверьте, является ли переменная строкой в Ruby Есть ли что-то более идиоматическое, чем следующее? foo.class == String Ответ 1 Я думаю, что вы ищете 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 Ответ 2 Более утиный подход заключается в том, чтобы сказать foo.respond_to?(:to_str) to_str указывает, что класс объекта не может быть фактическим потомком String, но сам объект очень похож на строку (stringy?). Ответ 3 Вы можете сделать: foo.instance_of?(String) И тем более общим: foo.kind_of?(String) Ответ 4 foo.instance_of? String или foo.kind_of? String если вам все равно, если он находится в String где-то вверх по цепочке наследования Ответ 5 В дополнение к другим ответам класс определяет метод === для проверки того, является ли объект экземпляром этого класса. 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) Ответ 6 Я думаю, что лучший способ - создать некоторые предикатные методы. Это также сохранит вашу "Единую точку управления". 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 Чем больше печатается утка;)
Ответ 1 Я думаю, что вы ищете 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
Ответ 2 Более утиный подход заключается в том, чтобы сказать foo.respond_to?(:to_str) to_str указывает, что класс объекта не может быть фактическим потомком String, но сам объект очень похож на строку (stringy?).
Ответ 4 foo.instance_of? String или foo.kind_of? String если вам все равно, если он находится в String где-то вверх по цепочке наследования
Ответ 5 В дополнение к другим ответам класс определяет метод === для проверки того, является ли объект экземпляром этого класса. 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)
Ответ 6 Я думаю, что лучший способ - создать некоторые предикатные методы. Это также сохранит вашу "Единую точку управления". 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 Чем больше печатается утка;)