Может ли Struct.new использовать параметры в качестве аргумента? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть структура - скажем, она выглядит следующим образом:

 class MyClass::Subclass < Struct.new(:model1, :model2)
   def method1
   end

   def method2
     if model1.active?

     end
   end
 end

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

Я думаю, что должно быть что-то похожее на то, что вы можете сделать в таких методах, как:

class MyClass::Subclass < Struct.new(:model1, :model2, options = {})
  def method1
    if options["need_this"]

    end
  end
end

Я продолжаю получать ошибки:

TypeError: {} is not a symbol

Есть ли что-то вроде options = {}, которое я могу использовать в Structs?Извините, это может показаться новым вопросом, но Ruby не мой основной язык.

1 Ответ

1 голос
/ 22 сентября 2019

Я понял, что вы пытаетесь добавить дополнительный список опций.(Пожалуйста, исправьте меня, если я ошибаюсь.) Для этого просто добавьте элемент.Затем в своем коде проверьте, был ли предоставлен хэш:

class MyClass::Subclass < Struct.new(:model1, :model2, :options)
  def method1
    if self.options && self.options["need_this"]
      p 'need this'
    end
  end
end

x = MyClass::Subclass.new(:x, :y, {'need_this' => 'yesido'})
x.method1 # => 'need this'

Вы указываете Struct параметры в виде символов (отсюда и ваша ошибка), и вы можете передавать любые типы аргументов, которые хотитедля них - в том числе ни одного вообще.Таким образом, хотя вы не можете указать значение по умолчанию, вы можете проверить, было ли предоставлено значение;если нет, то в этом случае options будет nil.В приведенном мною примере проверяется, был ли предоставлен хеш для options, и если да, была ли включена опция need_this в хеш.

Здесь Рубин док на Struct.Если вы прочитали обзор и документацию по методу new, у вас должно быть четкое представление о синтаксисе Struct.

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