我想創建一個函式來設定實體變數,如 attr_reader
class Base
def exec
# get all functions to check
# if all functions return true
# I will do something here
end
end
然后我有一個類繼承Base。
class SomeClass < Base
check :check_1
check :check_2
def check_1
# checking
end
def check_2
# checking
end
end
class Some2Class < Base
check :check_3
check :check_4
def check_3
# checking
end
def check_4
# checking
end
end
因為我只需要在所有類中執行 1 個邏輯,但我對每個類都有很多不同的檢查,所以我需要靈活地進行。
請給我一個關鍵字。
非常感謝。
uj5u.com熱心網友回復:
為了讓check :check_1您需要定義check為類方法:
class Base
def self.check(name)
# ...
end
end
由于您想稍后呼叫傳遞的方法名稱,我會將它們存盤在一個陣列中:(由另一個類方法提供checks)
class Base
def self.checks
@checks ||= []
end
def self.check(name)
checks << name
end
end
這已經給了你:
SomeClass.checks
#=> [:check_1, :check_2]
Some2Class.checks
#=> [:check_3, :check_4]
現在您可以從內部遍歷這個陣列exec并通過send. 您可以使用all?來檢查它們是否都回傳了真實的結果:
class Base
# ...
def exec
if self.class.checks.all? { |name| send(name) }
# do something
end
end
end
SomeClass.new.exec # doesn't do anything yet
將self.class需要的部分,因為你是在呼叫類的方法checks從實體方法exec。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376646.html
上一篇:Rails:在after_commit中呼叫相同的方法來創建、更新、洗掉但根據某些標志做不同的事情
下一篇:VCR在導軌系統測驗中不使用磁帶
