[英]What is an idiomatic way to remove false and nil from an Array in Ruby?
[英]Idiomatic way of returning nil in Ruby
在Ruby中习惯用法是不显式返回nil
吗? 我们这样说:
def find_something data
if data.has_what_we_need?
a = data.something
if a.has_what_we_want?
a.the_stuff[42]
end
end
end
与类似这样的东西(可以吵吵)相反:
def find_something data
if data.has_what_we_need?
a = data.something
if a.has_what_we_want?
a.the_stuff[42]
else
nil
end
else
nil
end
end
我尝试创建在不满足条件的情况下可以提早解决的方法,从而使代码在缩进方面变得平坦:
def find_something data
return unless data.has_what_we_need?
a = data.something
return unless a.has_what_we_want?
a.the_stuff[42]
end
这有两个定义明确的退出点,因为在阅读return
值时,它应该显示为相当明显的东西。 一return
不带参数将返回nil
给调用者。
如果你不关心nil
与false
,你可以凝聚这甚至更多:
def find_something data
return unless data.has_what_we_need?
a = data.something
a.has_what_we_want? and a.the_stuff[42]
end
我不知道与此有关的特定用法,但这可能是更可取的:
def find_something data
if data.has_what_we_need?
a = data.something
if a.has_what_we_want?
return a.the_stuff[42]
end
end
nil
end
如果习惯用法是指ruby在默认情况下是否从方法返回nil,则否。
Ruby方法默认返回执行的最后一条语句的值。 如果最后一条语句解析为nil,则您的方法将返回nil。
我从您的示例中假设,您希望一种方法在找到后返回一个值,但在未找到时返回nil。 这样的事情可能会起作用:
def find_something (i)
a = ['boris', 'natasha', 'moose' ,'squirrel']
a[i]
end
irb(main):020:0> find_something 4
=> nil
irb(main):021:0> find_something 2
=> "moose"`
从索引到数组a的结果是返回值。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.