6

Suppose I want to write a method in ruby whose last line is a method call but I do not want to return its return value. Is there a more elegant way to accomplish this other than adding a nil after the call?

def f(param)
    # some extra logic with param
    g(param) # I don't want to return the return of g
end
4

5 回答 5

6

不,但是如果f确实返回很重要nil,而不是任何返回,那么没有什么比在最后一行g(param)用 a 拼写出来更优雅的了。nil你为什么要混淆这个?大多数时候,优雅是明确和明显的。

我想到了 Python Zen of Python中的一些租户:

显式优于隐式。
简单胜于复杂。
可读性很重要。

于 2013-07-08T23:28:18.567 回答
6

如果你想让它“戳你的眼睛”明确,只需说“这个方法不返回任何东西”:

def f(param)
    # some extra logic with param
    g(param) # I don't want to return the return of g
    return
end

f(x)仍然会评估为,nil但是裸露return是一种明确的方式来表示“此方法不返回任何感兴趣的内容”,尾随nil表示“此方法显式返回nil”,这与不返回任何使用的内容并不完全相同。

于 2013-07-09T02:34:06.327 回答
5

不。如果你想返回 nil,最后一个表达式必须计算为 nil。您可以使用终止nil行或将方法体包围在其中nil.tap {}或您喜欢的其他方式来执行此操作,但这非常简单 - 最后一个评估的表达式被返回。

于 2013-07-08T23:20:22.703 回答
4

正如其他人所说,没有。但是,如果您想避免添加另一行,您有几个选择:

g(param); nil
g(param) && nil

第一个总是会导致f返回 nil;第二个将返回false(如果 g 返回 false)或nil(如果 g 返回真值)。

于 2013-07-08T23:31:14.873 回答
0
于 2013-07-09T00:30:57.853 回答