3 回答

TA貢獻1942條經驗 獲得超3個贊
就像Ruby中的所有其他方法一樣(實際上幾乎是任何面向對象的語言),
a === b
表示a的課程作者想要表達的意思。
但是,如果你不想混淆最煩你的同事,該公約是===為案件包容操作?;旧?,它是一個布爾運算符,它問一個問題:“ 如果我有一個標有抽屜的抽屜a,放入b那個抽屜有意義嗎? ”
另一種說法是“ 如果a描述一個集合,將b成為該集合的成員嗎? ”
例如:
(1..5) === 3 # => true
(1..5) === 6 # => false
Integer === 42 # => true
Integer === 'fourtytwo' # => false
/ell/ === 'Hello' # => true
/ell/ === 'Foobar' # => false
===運算符的主要用法是在case表達式中,因為
case foo
when bar
baz
when quux
flurb
else
blarf
end
被翻譯成(大致)類似
_temp = foo
if bar === _temp
baz
elsif quux === _temp
flurb
else
blarf
end
請注意,如果要搜索此運算符,通常將其稱為三等號運算符或threequals運算符或大小寫相等運算符。我真的不喜歡這些名稱,因為此運算符與相等絕對無關。
特別是,人們期望平等是對稱的:如果a等于b,那么b最好也等于a。同樣,人們希望平等可以傳遞:if a == b和b == cthen a == c。盡管沒有辦法真正保證使用像Ruby這樣的單調度語言,但是您至少應該努力保留此屬性(例如,遵循coerce協議)。
但是,因為===沒有對對稱性或傳遞性的期望。事實上,它是由設計非常不對稱。這就是為什么我不喜歡稱呼它與遠程平等相似的東西。這也是我認為的原因,應該將其稱為其他名稱~~~或類似名稱。

TA貢獻1963條經驗 獲得超6個贊
在Ruby中,===
運算符用于測試語句when
子句中的相等性case
。在其他語言中,以上是正確的。
據我所知,Ruby沒有真正的運算符,它們都是在表達式的LHS上調用的方法,并傳入表達式的RHS。因此,實際上,您可以覆蓋類中想要的任何“運算符”,以執行所需的任何內容(類似于C ++中的運算符重載)。
- 3 回答
- 0 關注
- 657 瀏覽
添加回答
舉報