Ответ 1
В дополнение к проверке класса Object # (класс метода экземпляра класса Object aka Base) вы можете
s.is_a? Thing
это проверит, будет ли у вас что-нибудь в своей родословной.
У меня есть метод С#, который мне нужно вызвать из части Ruby, для которой требуется аргумент System.Type. Есть ли эквивалент Ruby для typeof в С#? Вызов будет выглядеть примерно так на С#...
var CustomClasInstance = Container.GetInstance(typeof (ICustomClass))
В дополнение к проверке класса Object # (класс метода экземпляра класса Object aka Base) вы можете
s.is_a? Thing
это проверит, будет ли у вас что-нибудь в своей родословной.
Либо Object.class
, либо Object.type
должны делать то, что вам нужно.
Кроме того, могут использоваться два метода Object.is_a?
и Object.instance_of?
. Однако они не на 100% идентичны. Оператор obj.instance_of?(myClass)
возвращает true, только если объект obj
был создан как объект типа myClass
. Использование obj.is_a?(myClass)
вернет true, если объект obj
имеет класс myClass
, имеет класс, унаследованный от myClass
, или содержит в нем модуль myClass
.
Например:
x = 1
x.class => Fixnum
x.instance_of? Integer => false
x.instance_of? Numeric => false
x.instance_of? Fixnum => true
x.is_a? Integer => true
x.is_a? Numeric => true
x.is_a? Fixnum => true
Поскольку ваш метод С# требует особого типа данных, я бы рекомендовал использовать Object.instance_of?
.
Для справки о том, как идентифицировать типы переменных в Ruby, см. http://www.techotopia.com/index.php/Understanding_Ruby_Variables#Identifying_a_Ruby_Variable_Type
Если у вас есть переменная с именем s
, вы можете получить ее тип, вызвав
s.class
ICustomClass.to_clr_type