我正在尝试通过阅读代码来学习Ruby,但我遇到了以下情况,我在任何教程/备忘单中都找不到.
def foo!
# do bar
return bar
end
Run Code Online (Sandbox Code Playgroud)
有什么意义的"!" 在方法定义?
Jim*_*art 11
Ruby不会将!方法名称末尾视为特殊字符.按照惯例,结尾的方法会!产生某种副作用或其他问题,方法作者试图引起注意.示例是执行就地更改的方法,或者可能抛出异常,或者尽管有警告仍继续执行操作的方法.
例如,以下是String#upcase!对比String#upcase:
1.9.3p392 :004 > foo = "whatever"
=> "whatever"
1.9.3p392 :005 > foo.upcase
=> "WHATEVER"
1.9.3p392 :006 > foo
=> "whatever"
1.9.3p392 :007 > foo.upcase!
=> "WHATEVER"
1.9.3p392 :008 > foo
=> "WHATEVER"
Run Code Online (Sandbox Code Playgroud)
ActiveRecord广泛使用bang方法,例如save!,在失败时引发异常(vs save,返回true/false但不引发异常).
这是一个"抬头!" 旗帜,但没有任何强制执行此操作.!如果你想混淆和/或吓唬人,你可以结束所有的方法.