運算子¶ ↑
在 Ruby 中,運算子(例如 +
)定義為類別中的方法。 文字 在較低層級的 C 語言中定義其方法。例如,String
類別。
Ruby 物件可以為大多數運算子定義或重載其自己的實作。
以下是範例
class Foo < String def +(str) self.concat(str).concat("another string") end end foobar = Foo.new("test ") puts foobar + "baz "
這會列印
test baz another string
可用的運算子取決於實作類別。
運算子行為¶ ↑
類別對特定運算子的行為是特定於該類別的,因為運算子是方法實作。
使用運算子時,運算式左側的表達式會指定行為。
'a' * 3 #=> "aaa" 3 * 'a' # TypeError: String can't be coerced into Integer
邏輯運算子¶ ↑
邏輯運算子不是方法,因此無法重新定義/覆載。它們在較低層級進行標記化。
短路邏輯運算子 (&&
、||
、and
和 or
) 並不總是會產生布林值。類似於區塊,它是由最後評估的表達式來定義運算的結果。
&&
、and
¶ ↑
&&
/and
運算子透過從左到右執行運算子兩側的表達式,並在第一次出現假值表達式時停止,來提供短路。定義結果的表達式是最後執行的表達式,無論是最後的表達式,還是第一次出現假值表達式。
一些範例
true && 9 && "string" #=> "string" (1 + 2) && nil && "string" #=> nil (a = 1) && (b = false) && (c = "string") #=> false puts a #=> 1 puts b #=> false puts c #=> nil
在這個最後的範例中,c
已初始化,但未定義。
||
、or
¶ ↑
||
/or
短路的方式,是傳回第一個真值表達式的結果。
一些範例
(1 + 2) || true || "string" #=> 3 false || nil || "string" #=> "string"