我有一点问题我无法解决。我有通过参数传递哈希的类,但如果参数计数小于或大于2并且任何值是nill,我必须引发错误。
如果我不想传递单独的参数,而是哈希值,那么这里最好的做法是什么?
类别:
Class MyClass
attr_accessor :param1, :param2
def initialize(attr_hash)
self.param1 = attr_hash[:param1].to_f
self.param2 = attr_hash[:param2]
end
end
我正在传递这样的东西
instance = MyClass.new({param1: 12, param2: "Ok"})
是否有一种raily或更多ruby方式来实现我想要的东西,而不是通过哈希迭代并检查是否有任何值是空的以及count是否小于或大于2?
答案 0 :(得分:2)
如果参数无效,请不要引发错误。而是创建valid?
实例方法来检查状态。
另外,如果要将哈希作为输入传递,请使用Ruby OpenStruct类。
require 'ostruct'
class MyClass < OpenStruct
def valid?
@table.length > 1
end
end
a = MyClass.new(a: :b, c: :d)
a.valid? # true
a.c # :d
a=MyClass.new(a: :b)
a.valid? # false
答案 1 :(得分:0)
以下内容应该有效:
def initialize(hash)
raise 'error' if hash.size < 2 or hash.value?(nil)
self.param1 = hash[:param1].to_f
self.param2 = hash[:param2]
end
正如blelump所指出的,这将是创建课程的更好方法:
require 'ostruct'
class MyClass < OpenStruct
def valid?
@table.length > 1 and !@table.value?(nil)
end
end