/ / class_eval i otwarte klasy - ruby, szał

class_eval i open classes - ruby, spree

Używam Spree, a Spree ma klasę o nazwie Order to wygląda jak:

module Spree
class Order
# class definition.
end
end

W mojej aplikacji dostosowywałem Order jak na przykład:

Spree::Order.class_eval do
# customisations
end

Moje pytanie brzmi: czy mogę to po prostu zrobić:

module Spree
class Order
# My own customisations.
end
end

Jakieś wady tego? Zasadniczo chcę uniknąć używania class_eval.

Odpowiedzi:

2 dla odpowiedzi № 1

Benjamin, ponownie otwórz klasę nie poinformuje cię (ale class_eval zgłosi błąd), jeśli istniejąca klasa nie istnieje lub nie została załadowana.

Ale jeśli masz zasięg testowy, myślę, że ponowne otwarcie klasy powinno być bezpieczne?


3 dla odpowiedzi № 2

nie możesz zmienić klasy bez class_eval. po prostu spróbuj zastąpić jedną metodę, a wszystkie inne metody zniknęły. z class_eval możesz tego uniknąć. to rubinowy sposób.