Направляющие: Я не могу вызвать функцию в модуле в / lib - что я делаю неправильно?

JaredPar,

Это не сработало для меня, если я передаю typeof (type & lt;>) как toCheck. Вот что я изменил.

static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != typeof(object)) {
        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
          if (cur.IsGenericType && generic.GetGenericTypeDefinition() == cur.GetGenericTypeDefinition()) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}
43
задан Mike Woodhouse 7 March 2009 в 04:09
поделиться

5 ответов

Я собираюсь попытаться суммировать различные ответы сам, так как у каждого было что-то ценное для высказывания, но ни один действительно не добрался до того, что я теперь понимаю, вероятно, лучший ответ:

я задавал неправильный вопрос, потому что я делал его неправильно.

По причинам я больше не могу объяснять, я хотел ряд абсолютно автономных функций в библиотеке, которая представила методы, которые я пробовал к DRY из моих классов. Это может быть достигнуто, с помощью вещей как

module Foo
  def self.method_one
  end

  def Foo.method_two
  end

  class << self
    def method_three
    end
  end

  def method_four
  end

  module_function :method_four
end

я мог также include мой модуль, или в классе, в этом случае методы становятся частью класса или снаружи, в этом случае они определяются на любом классе, который я выполняю внутри (Объект? Ядро? Irb, если я являюсь интерактивным? Вероятно, не прекрасная идея, тогда)

вещь, не было никакого серьезного основания не иметь класс во-первых - я так или иначе добрался до хода мыслей, который взял меня вниз редко используемое и откровенно немного странное ответвление. Вероятно, ретроспективный кадр ко дням перед OO стал господствующей тенденцией (я являюсь достаточно взрослым, что до сегодня я провел намного больше лет, пишущий процессуальный код).

, Таким образом, функции переместились в класс, где они кажутся довольно счастливыми, и методы класса, таким образом представленные, бодро используются везде, где необходимо.

26
ответ дан abraham 23 September 2019 в 12:11
поделиться

Если Вы хотите Module - функции уровня, определяете их каким-либо из этих способов:

module Foo
  def self.method_one
  end

  def Foo.method_two
  end

  class << self
    def method_three
    end
  end
end

Все эти пути сделают методы доступными как Foo.method_one или Foo::method_one и т.д.

, Как другие люди упомянули, методы экземпляра в Module, с являются методами, которые доступны в местах, где Вы имеете include d Module

59
ответ дан Gareth 23 September 2019 в 12:11
поделиться

Необходимо включать модуль

include Testfunctions

Тогда, 'abc' возвратит что-то.

4
ответ дан james 23 September 2019 в 12:11
поделиться

Вы не можете назвать метод в Модуле непосредственно. Необходимо включать его в класс. Попробуйте это:

>> class MyTest
>>   include TestFunctions
>> end
=> MyTest
>> MyTest.new.abc
123
=> nil
4
ответ дан Sarah Mei 23 September 2019 в 12:11
поделиться

Можно также использовать module_function как так:

module TestFunctions
  def abc
    puts 123
  end

  module_function :abc
end

TestFunctions.abc  # => 123

Теперь можно включать TestFunctions в класс и назвать "abc" из модуля TestFunctions.

24
ответ дан Marcin Urbanski 23 September 2019 в 12:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: