我有一个哈希定义了一些变量:
event_details = {
:title => title(event),
:desc => desc(event),
:url => url(event),
:datetime => datetime(event),
:address => address,
:lat => coords["lat"],
:lng => coords["lng"]
}
我想创建一个"事件"对象
event = Event.new(event_details)
现在我只想创建对象event
当且仅当所有属性都被定义而不是nil时,例如,lat和lng变量有时为nil,我不想创建该事件宾语。
我正在考虑在我的事件类中使用rescue子句,但我不确定如何创建事件实例,并验证每个属性的存在。任何提示将不胜感激
答案 0 :(得分:1)
我建议:
keys = [:title, :desc, :url, :datetime, :address, :lat, :lng]
event = Event.new(event_details) unless
(keys-event_details.keys].any? || event_details.values.any?(&:nil?)
或
if (keys-event_details.keys].any? || event_details.values.any?(&:nil?)
<..action..>
else
event = Event.new(event_details)
end
答案 1 :(得分:0)
你可以这样做:
class Event
attr_accessor :title, :desc
RequiredKeys = [:title, :desc]
def initialize(hash = {})
missing_keys = RequiredKeys - hash.keys
raise "Required keys missing: #{missing_keys.join(', ')}" unless missing_keys.empty?
hash.each do |key, value|
public_send("#{key}=", value);
end
end
end