我想验证一个Struct可以拥有的所有参数总是在创建新参数时传入。
是否有烘焙方式或优雅的方式来做某些事情......
MyStruct = Struct.new(:param1,:param2) do
raise "params required" if param1.nil? || param2.nil?
end
上述代码当然不起作用,但我认为它表达了我想要走向的目标......
如果可能的话,我想在错误中看到所有参数的列表。
答案 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)