Sobes.tech
Middle

Czym jest operator '===' w Ruby?

sobes.tech AI

Odpowiedź od AI

Operator === (trzy równe) w Ruby nazywa się operatorem sprawdzania przynależności (case equality operator).

Używa się go w wyrażeniach case/when i jest definiowany przez klasy do sprawdzania, czy prawy operand należy do "kategorii" lub "zakresu" reprezentowanego przez lewy operand.

Zachowanie operatora === zależy od klasy lewego operandu.

Przykłady:

  • Klasa Module: Sprawdza, czy prawy operand jest instancją lub potomkiem modułu/klasy.
    # Sprawdza, czy prawy operand jest instancją String lub jego potomkiem.
    String === "hello"
    # => true
    
  • Klasa Range: Sprawdza, czy prawy operand mieści się w zakresie.
    # Sprawdza, czy 5 mieści się w zakresie 1..10.
    (1..10) === 5
    # => true
    
  • Klasa Regexp: Sprawdza, czy łańcuch pasuje do wyrażenia regularnego.
    # Sprawdza, czy łańcuch "/ruby/" pasuje do wyrażenia /ruby/.
    /ruby/ === "/ruby/"
    # => true
    
  • Klasa Proc: Wywołuje blok z prawym operatorem jako argumentem.
    # Wywołuje blok z argumentem 5.
    ->(x) { x > 3 } === 5
    # => true
    
  • Klasa Symbol: Porównuje symbol z innym łańcuchem lub symbolem.
    # Porównuje symbol :test z łańcuchem "test".
    :test === "test"
    # => true
    

W większości innych klas === zachowuje się jak ==.

Zastosowanie w case/when:

Wyrażenie case condition jest równoważne serii wywołań === na każdej wartości when z condition jako prawym operatorem.

# Równoważne z String === value
# Następnie Integer === value
case value
when String
  # ...
when Integer
  # ...
end