2012-03-14 69 views
0

可能重複:
What does ||= mean in Ruby?'|| ='操作符在ruby中做了什麼?

我是新來的Ruby和我看到這個正在這裏的一個答案用:

RACK_ENV = ENV['ENVIRONMENT'] ||= 'test'

我不能找不到||=運營商的任何參考...

+0

事實上它 - 沒有搜索顯示:/ – bluegray 2012-03-14 09:31:30

+0

我真的很幸運 - 這是近右側的_Related_列表的頂部,但你可能要考慮的[符號獵犬搜索引擎](http://symbolhound.com/?q=||%3D),當你需要在將來搜索符號時,我不知道他們是如何做到的,但它對谷歌的事情非常有用絕對失敗在 – sarnold 2012-03-14 09:40:25

+0

哇,現在是有用的,謝謝! – bluegray 2012-03-14 10:12:18

回答

-2

||做?如果你有a和b,那麼a || b爲真,當且僅當a或b爲真。這與|| =相同,該運算符結合了兩個運算'='和'||'。所以a ||= b等於c || c = b

編輯:所以在你的上下文中ENV ['ENVIRONMENT'] || ='test'表示如果ENV ['ENVIRONMENT']不是零且不是假,它將保留它的值,否則它將成爲'測試',之後ENV ['ENVIRONMENT']的新值被分配給RACK_ENV

+0

實際上它是'c || c = b'。如果c是真的,那麼完全沒有分配。當它實際上以大部分時間使用的方式使用時,這是一個重要的區別,即作爲可選的初始化程序。 – 2012-03-14 09:38:27

+1

-1。這是錯誤的,正如已經在StackOverflow和Ruby郵件列表中向死亡解釋過的那樣。 – 2012-03-14 17:42:12

1

這裏是解釋它非常好的文章。

«Ruby,concurrency,... |主| |如何更新...» Ruby T-Square運算符的奇怪情況。 作者:prashant發佈於2008年12月14日 「|| =」操作符很有趣,無論它如何在Ruby land中被廣泛使用。運營商不會做你通常期望的。即,

一個|| = EXPR

是不一樣的

A = A || EXPR

評價恰好是

一個或= EXPR

以及在至少一個用例的區別是很重要的[0]

作爲一個小DTrace腳本將驗證,這運算符未實現是一種方法(或Ruby地區中的任何地方)並且是VM的固有方法。原因是性能,以及當您'OR'時無需評估整個表達式以得出結果:

「Ruby的布爾運算符是內置於語言中的,並且不基於方法例如,類不能定義它們自己的方法,Ruby定義了特殊的真值和假值,但沒有布爾類型的方法,原因是布爾運算符可以應用於任何值,並且必須表現爲一致任何類型的操作數「。

。 。 。

「Ruby的布爾運算符是語言的核心部分而不是可重定義方法的另一個原因是二元運算符是」短路「。如果運算值完全由左操作數確定,那麼右手操作數被忽略,甚至從不被評估。「

https://blogs.oracle.com/prashant/entry/the_ruby_t_square_operator

相關問題