如何編寫一個ruby模塊,對包含它的類施加一些條件,這些條件必須滿足當前打開的類定義的末尾?ruby模塊如何對包含它的類執行條件?
要具體,假設條件是「一個類變量@@foo
應該被定義爲> 0」
我想寫一個模塊,看起來是這樣的:
module NeedPositiveFoo
module ClassMethods
def validate_positive_foo
raise unless defined?(@@foo) && @@foo > 0
end
end
def included(other)
other.extend(ClassMethods)
end
end
那麼這個類的定義是有效的:他們的收盤end
的後
class ValidClass
include NeedPositiveFoo
@@foo = 3
end
但這些類定義將提高:
class InvalidClass1
include NeedPositiveFoo
# @@foo is not defined
end
class InvalidClass2
include NeedPositiveFoo
@@foo = -2
end
沒有「類定義的末尾」這樣的東西。隨時可以在任何時候打開課程主體。或者如果你的意思是語法級別,那麼你可以使用TracePoint。 – sawa
@sawa這是不正確的。有「當前打開的類定義的結束」這樣的東西,適用於'included'回調中。 – mudasobwa
@mudasobwa你指的是語法級別。你說得對,但我的意思是另一回事。 – sawa