運算子

在 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

邏輯運算子

邏輯運算子不是方法,因此無法重新定義/覆載。它們在較低層級進行標記化。

短路邏輯運算子 (&&||andor) 並不總是會產生布林值。類似於區塊,它是由最後評估的表達式來定義運算的結果。

&&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"