引发创建类对象参数哈希的Raise ArgumentError不符合要求

时间:2014-11-10 14:14:48

标签: ruby-on-rails ruby hash parameters

我有一点问题我无法解决。我有通过参数传递哈希的类,但如果参数计数小于或大于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?

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