为什么在Ruby方法中使用感叹号?
在Ruby中,有些方法有一个问号( ?
),提出一个像include?
这样的问题include?
询问是否包含所讨论的对象,然后返回true / false。
但为什么有些方法在其他人不知道的地方有惊叹号( !
)?
这是什么意思?
一般来说,以!
结尾的方法!
表明该方法将修改它所调用的对象 。 Ruby把这些称为“ 危险的方法 ”,因为它们改变了别人可能参考的状态。 这是一个简单的字符串示例:
foo = "A STRING" # a string called foo
foo.downcase! # modifies foo itself
puts foo # prints modified foo
这将输出:
a string
在标准库中,有很多地方会出现一对类似命名的方法,其中一个是!
一个没有。 那些没有被称为“安全方法”,他们返回原件的副本 ,应用于副本的更改,被调用方不变。 这是没有!
的同一个例子!
:
foo = "A STRING" # a string called foo
bar = foo.downcase # doesn't modify foo; returns a modified string
puts foo # prints unchanged foo
puts bar # prints newly created bar
这输出:
A STRING
a string
请记住,这只是一个约定,但很多Ruby类都遵循它。 它还可以帮助您跟踪代码中修改的内容。
感叹号意味着很多事情,除了“这很危险,要小心”之外,有时候你不能从中说出很多。
正如其他人所说的那样,在标准方法中,它经常被用来指示一个方法,该方法会导致对象自身发生变异,但并非总是如此。 请注意,很多标准方法会更改接收器,并且没有感叹号( pop
, shift
, clear
),并且有些感叹号方法不会更改接收器( exit!
)。 例如,看这篇文章。
其他库可能以不同的方式使用它 在Rails中,感叹号通常意味着该方法会在失败时抛出异常,而不是无故失败。
这是一个命名约定,但许多人以不同的方式使用它。 在你自己的代码中,一个好的经验法则就是在方法做一些“危险的事情”时使用它,尤其是当两个名称相同的方法存在时,其中一个方法比另一个更危险。 “危险”可能意味着几乎任何东西。
该命名约定从Scheme中解除。
1.3.5命名约定
按照惯例,总是返回一个布尔值的过程的名字通常以``?'结尾。 这样的过程被称为谓词。
按照惯例,将值存储到先前分配的位置(参见3.4节)的过程的名称通常以“!”结尾。 这些程序被称为突变程序。 按照惯例,突变过程返回的值是未指定的。
链接地址: http://www.djcxy.com/p/44835.html上一篇: Why are exclamation marks used in Ruby methods?
下一篇: Can I invoke an instance method on a Ruby module without including it?