Aby zapytać coś takiego:Metody Boolean w Ruby?
MyClass::create().empty?
Jak bym utworzonej empty
ciągu MojaKlasa?
Puste (prawda/fałsz) zależy od tego, czy zmienna klasy @arr
jest pusta, czy nie.
Aby zapytać coś takiego:Metody Boolean w Ruby?
MyClass::create().empty?
Jak bym utworzonej empty
ciągu MojaKlasa?
Puste (prawda/fałsz) zależy od tego, czy zmienna klasy @arr
jest pusta, czy nie.
Znak zapytania jest faktycznie częścią nazwy metody, więc można to zrobić:
class MyClass
def empty?
@arr.empty? # Implicitly returned.
end
end
dokładnie taki sam jak pokazałem w poprzednim poście, ale z inną nazwą metody.
Po pierwsze, create
musi zwrócić coś metodą empty?
. Na przykład:
class MyClass
def self.create
[]
end
end
Jeśli chcesz działać na instancjach MyClass
jak na ostatnie pytanie:
class MyClass
def self.create
MyClass.new
end
def initialize
@arr = []
end
def empty?
@arr.empty?
end
def add x
@arr << x
self
end
end
Tutaj MyClass
działa jak prosty owinięcia wokół tablicy, zapewniając metodę add
.
pry(main)> MyClass.create.empty?
=> true
Może zajść potrzeba sprawdzenia, czy wartość @arr jest zerowa, czy też nie. To zależy od twojej definicji klasy pustej.
def empty?
[email protected] || @arr.empty?
end
Można użyć Forwardable
delegować empty?
z klasy do tablicy:
require "forwardable"
class MyClass
extend Forwardable
def_delegators :@arr, :empty?
def initialize(arr)
@arr = arr
end
end
my_object = MyClass.new([])
my_object.empty? # => true
Czy to znaczy * class zmienną * '@@ arr' instancji zmiennej lub * *' @ arr'? – maerics
W języku Ruby istnieje 'initialize', który jest wywoływany przez' MyClass.new'. – Reactormonk
"W Ruby jest inicjalizacja, która jest wywoływana przez MyClass.new". Zgoda. I dobrze jest podążać za tym w Rubim; Trzymaj się żółtej ceglanej drogi, gdy masz już swoje kapcie z rubinem. –