Ruby Struct和OStruct:我如何需要参数

时间:2015-04-21 21:12:45

标签: ruby

我想验证一个Struct可以拥有的所有参数总是在创建新参数时传入。

是否有烘焙方式或优雅的方式来做某些事情......

MyStruct = Struct.new(:param1,:param2) do
  raise "params required" if param1.nil? || param2.nil?
end

上述代码当然不起作用,但我认为它表达了我想要走向的目标......

如果可能的话,我想在错误中看到所有参数的列表。

2 个答案:

答案 0 :(得分:1)

你快到了。只需在块中使用显式的params count定义自己的构造函数:

MyStruct = Struct.new(:param1,:param2) do
  def initialize(param1, param2)
    super
  end
end

MyStruct.new('1','2') # => #<struct MyStruct param1="1", param2="2"> 
MyStruct.new('1') # => ArgumentError: wrong number of arguments (1 for 2)

答案 1 :(得分:0)

当然,只需像处理类一样处理它

MyStruct = Struct.new(:param1, :param2, :param3) do |params|
  def initialize *args
    raise "params are required #{[:param1, :param2, :param3]} - #{args}}" unless (args.length == 3)
  end
end
str = MyStruct.new(1,2)
p str

# in `initialize': params are required [:param1, :param2, :param3] - [1, 2]} (RuntimeError)