使用 ruby“或等于”; ||= 返回散列或 nil 的方法
我有一个返回散列或 nil 的方法:
def person_of_age(age)
some_hash = @array_of_hashes.select { |h| h.age == age }.last
return some_hash
end
我想像这样使用这个散列:
my_height = 170
my_age = 30
if my_height < self.person_of_age(my_age)['height']
puts "You are shorter than another person I know of the same age!"
end
现在,如果散列返回 nil,ruby 不喜欢我使用 ['height']:
undefined method `[]' for nil:NilClass (NoMethodError)
足够公平,但是我该如何使用||= 避免这个问题? 如果该方法确实返回 nil,那么我们就说我希望“高度”为 0。
我已经尝试了以下方法,但无济于事:
if my_height < self.person_of_age(age)||={ 'height' => 0 }['height']
#...
if my_height < self.person_of_age(age)['height'] ||= 0
显然我的示例运行得有点薄,还有其他方法可以解决此问题,但如果 ||= 可以使用,我很想知道如何使用。
谢谢你!
I have a method that returns a hash, or nil:
def person_of_age(age)
some_hash = @array_of_hashes.select { |h| h.age == age }.last
return some_hash
end
I want to use this hash like so:
my_height = 170
my_age = 30
if my_height < self.person_of_age(my_age)['height']
puts "You are shorter than another person I know of the same age!"
end
Now, if the hash returns nil, ruby doesn't like me using ['height']:
undefined method `[]' for nil:NilClass (NoMethodError)
Fair enough, but how can I use ||= to avoid this problem?
If the method does return nil, let's just say I want the 'height' to be 0.
I have tried things along the lines of, to no avail:
if my_height < self.person_of_age(age)||={ 'height' => 0 }['height']
#...
if my_height < self.person_of_age(age)['height'] ||= 0
Clearly my example is running a little thin, and there are other ways around this problem, but if ||= can be used I'd love to know how.
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
显而易见:
但不知怎的,这感觉不太对劲
obvious:
but somehow this does not feel so right
你可以这样做:
或者你可以重写
person_of_age
方法:或更简单
You can do it like this:
Or you can rewrite
person_of_age
method:or simpler
我不确定这对您的情况是否有帮助,但哈希具有的一项功能是
I'm not sure if this helps in your circumstance, but one capability Hash has is