Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Struct.new能否将选项作为参数?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Struct.new能否将选项作为参数?

Ruby on rails Struct.new能否将选项作为参数?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个结构-假设它看起来像这样: class MyClass::Subclass < Struct.new(:model1, :model2) def method1 end def method2 if model1.active? end end end 这就是我目前如何设置子类的方法。我现在的处境是,我必须通过一次性的选择 我的想法是,必须有一些类似的方法,比如: class MyClass::Subclass < Str

我有一个结构-假设它看起来像这样:

 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:{}不是符号


是否有类似options={}的东西可以在结构中使用?抱歉,这似乎是一个新问题,但Ruby不是我的主要语言。

我明白了,您试图做的是添加一个可选的选项列表。如果我错了,请纠正我。为此,只需添加元素。然后在代码中检查是否提供了哈希:

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'
将结构参数指定为符号会导致错误,并且可以向它们传递任何类型的参数,包括任何类型的参数。因此,虽然不能指定默认值,但可以检查是否提供了值;如果不是,在这种情况下,选项将为零。我所举的示例检查是否为选项提供了哈希,如果是,则检查哈希中是否包含此选项


结构上的ruby文档。如果您阅读了有关新方法的概述和文档,您应该对Struct语法有一个清晰的了解。

可能的重复:如果您能够解释Struct::new文档中您不清楚的内容,这将非常有帮助。这样,Ruby开发人员就可以改进文档,使未来的Ruby开发人员不会遇到与您相同的问题。帮助让世界变得更美好!如果我们提前知道您在文档中做什么和不理解什么,这也会有助于更好地集中您问题的答案。没有什么不清楚的。我想我是在寻找如何构造需要选项参数的东西的指导。当我发帖时,我的大脑被炸了,所以我没有考虑把选项变成一个符号。再说一次,Ruby不是我的主要语言,所以如果这是一个糟糕的问题,请道歉。谢谢Bob-我最后在这个周末玩了一圈,并弄明白了这一点。这正是我使用它的方式。感谢您提供清晰的答案和代码: