2009-10-05 59 views
3

我想知道它的真正含義以及如何正確使用它。什麼「?」在紅寶石意味着什麼?

另一個問題是關於斷言我看到

assert product.valid? product.errors.full_messages

assert product.valid? 

但我不能找到那些語法斷言什麼是對的assert(product.errors.full_messages)第二ARG指或它是arg的?

感謝

+0

我剛剛得到了關於assert的回答,在每個assert方法中的最後一個參數(可選)指定的消息顯示它什麼時候聲明爲false – sarunw 2009-10-05 10:54:44

回答

11

Ruby對方法使用特定的命名約定。它可以讓你快速識別副作用,他們可能有,或返回類型..

這些約定在方法名的末尾使用特殊標記,如「」和「」。這是不常見的,因爲大多數編程語言都傾向於禁止標識符中的這些字符,但它確實是方法名稱的一部分。 (且不應與運營商混淆)

  • 後固定「」是指該方法返回一個布爾值。這是替換「is」前綴的一種便捷方式。 (這個慣例也傾向於存在於lisp方言中)
  • 修正後的「」意味着該方法將修改實例,因此不會作用於/返回副本。

請注意,這些只是公約。 絕不一定要跟着它,但認爲是一個很好的做法。

+2

只是在這種情況下添加到這篇文章'?'和'!'實際上是方法名稱的一部分,而不是操作符。 – rslite 2009-10-05 08:59:59

+2

只是爲了補充一點?和!只是一個約定而不是要求。 – 2009-10-05 09:06:51

+4

的確如此,目的!標記是將一種方法標記爲特殊的。這並不一定意味着它會具有破壞性或危險性,但這意味着它將需要更多的關注而不是其替代品。 ActiveRecord創建!是非破壞性使用的例子。 – khelll 2009-10-05 09:30:06

1

這只是慣例把它放在一個返回布爾AFAIK的方法。而不是做每一個IsSomething。

3

這純粹是一種慣例,它沒有形式上的意義。人們很難理解這一點,因爲許多(大多數?)語言不允許諸如?和!在標識符中。