我在这里碰到了一堵墙.假设我的代码如下所示:
def foo
if bar
123
else
nil
end
end
Run Code Online (Sandbox Code Playgroud)
这里的返回值是Int或Nil.我已经习惯了可选项的概念(在Rust,F#,Haskell等语言中),这让我很困惑.
我意识到我可以毫无问题地返回任何类型的值,但是来自更具功能性的背景它只是感觉不对.
在Rust,我会回来的Option<T>.这样我就可以轻松地测试是否Some返回了值,或者没有值(None).在Ruby/Crystal中,这看起来很愚蠢.
所以,这里有一个问题:
如果nil没有有用的值返回并对其进行测试,我是否应该返回,这是处理此类情况的惯用方法吗?如果没有,我该如何以惯用的方式做到这一点?
是的,回来 nil
返回nil是Ruby中鼓励的最佳实践.你可以检查一下foo.nil?
注意,如果您有兴趣学习Ruby的更多最佳实践,最好参考Gregory Brown撰写的"Ruby Best Practices"一书.
在相关的说明中,语言默认nil在许多地方返回.例如,当if表达式没有else阻塞时,else块的返回值为nil.
所以你可以简化你的例子
def foo
123 if bar
end
Run Code Online (Sandbox Code Playgroud)
nil如果bar不是真的会返回
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |