有时我看到Ruby中的方法有"?" 和"!" 在他们的最后,例如:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Run Code Online (Sandbox Code Playgroud)
我想知道他们的目的是什么?它们只是语法糖衣吗?
jtb*_*des 153
它只是"糖衣"以提高可读性,但它们确实有共同的含义:
!
执行某些永久或潜在危险变化的方法 ; 例如:
Enumerable#sort
返回对象的排序版本,同时对其进行Enumerable#sort!
排序.ActiveRecord::Base#save
如果保存失败则返回false,同时ActiveRecord::Base#save!
引发异常.Kernel::exit
导致脚本退出,同时Kernel::exit!
立即绕过任何退出处理程序.?
返回一个布尔值,这使得代码流程更直观地像一个句子- if number.zero?
读起来像"如果数字是零",但if number.zero
只是看起来怪异.在您的示例中,name.reverse
求值为反向字符串,但仅在该name.reverse!
行之后,该name
变量实际上包含反转的名称.name.is_binary_data?
看起来像"是name
二进制数据?".
与 - 我想 - 相比 - 大多数编程语言......
Ruby,方法允许以问号或感叹号结束.
按照惯例,回答问题的方法(即Array#empty?如果接收者为空则返回true)以问号结束.
按惯例,潜在的"危险"方法(即修改自我或参数的方法,退出!等)以感叹号结束.
来源:http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/,节搞怪方法名
归档时间: |
|
查看次数: |
39193 次 |
最近记录: |