Есть ли Ruby-эквивалент для зарезервированного слова typeof в C #? - PullRequest
31 голосов
/ 03 февраля 2010

У меня есть метод C #, который мне нужно вызвать из фрагмента Ruby, для которого требуется аргумент System.Type.Есть ли Ruby-эквивалент typeof в C #?Вызов будет выглядеть примерно так в C # ...

var CustomClasInstance = Container.GetInstance (typeof (ICustomClass))

Ответы [ 4 ]

55 голосов
/ 04 февраля 2010

Либо 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

Поскольку для вашего метода C # требуется очень специфический тип данных, я бы рекомендовал использовать Object.instance_of?.

38 голосов
/ 03 февраля 2010

В дополнение к проверке класса Object # (класс метода экземпляра в Object aka Base class), вы могли бы

s.is_a? Thing

это проверит, есть ли у s Thing где-нибудь в своем происхождении.

5 голосов
/ 03 февраля 2010

Справочную информацию о том, как идентифицировать типы переменных в Ruby, смотрите http://www.techotopia.com/index.php/Understanding_Ruby_Variables#Identifying_a_Ruby_Variable_Type

Если у вас есть переменная с именем s, вы можете получить ее тип, вызвав

s.class
1 голос
/ 03 февраля 2010
ICustomClass.to_clr_type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...