Массив типов в Ruby - PullRequest
       4

Массив типов в Ruby

1 голос
/ 27 июля 2010

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

def tryClasses(in)
    types = [Foo::A, Foo::B, Foo::C]

    types.each do |type|
        a = type.new(in)
        return a != null
     end
end

Как мне создать и массив типов классов?Делая это таким образом, я получаю NoMethodError (неопределенный метод 'A' для Foo)

1 Ответ

4 голосов
/ 27 июля 2010

Помимо очевидных синтаксических ошибок (например, in - это повторно найденное слово, а null пишется nil в Ruby), код, который вы показали, должен работать так же, как и сейчас, и действительно, когда яскопируйте и вставьте его в мою установку Ruby.Это предполагает, конечно, что классы Foo::A, Foo::B и Foo::C действительно существуют.Если они этого не делают, то, очевидно, код не может работать.

Это, однако, полностью не-Rubyish и нарушает почти все правила кодирования в книге:

  1. отступравно 2 пробелам
  2. имена методов snake_case, а не camelCase
  3. , явно проверяющие равенство nil - это нет-нет, просто предпочтительнее просто вызвать #nil?
  4. try_classes не совсем название метода, раскрывающего намерение
  5. , а WTF означает in значение?
  6. Рубиисты гораздо предпочитают методы более высокого порядка, чем явные циклы

Вот более Rubyish версия кода, который вы написали:

def can_create_object?(*args)
  [Foo::A, Foo::B, Foo::C].none? do |klass|
    klass.new(*args).nil?
  end
end

Тем не менее, обратите внимание, что я довольно уверен, что вся идея в корне ошибочна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...