我試圖實現一個時髦的版本的方法鏈接。每個函數調用後返回的類的實例很容易,你只是做在ruby中返回包含對象實例
def chainable_method
some_code()
self
end
我的想法是,你可以調用的方法依賴於以前的方法調用。我試圖通過返回屬於包含對象的對象來實現此目的。包含的對象將有一些特殊的方法,然後實現method_missing返回包含對象的實例。
編輯:子對象有一些與它相關的狀態,應該在其本身,而不是父對象。以前可能並不清楚爲什麼我只需要一個完整的方法調用實例。
super在這種情況下是不相關的,因爲包含的對象不會從包含對象繼承,我不想在包含的對象上調用包含對象的方法 - 我想調用包含對象的方法包含對象本身。我想要包含的對象,而不是包含的對象類。
不知道這是否可能。
編輯:重寫所有使用「包含/包含對象」而不是完全不正確的父/子對象。 另外,我使用1.9.3,如果這很重要。版本不重要,如果需要,我可以更改。
我的解釋可能不清楚。這裏是代碼:
class AliasableString
def initialize(string)
@string = string
end
def as(aka)
@aka = aka
end
def has_aka?
[email protected]?
end
# alias is a reserved word
def aka
@aka
end
def to_s
@string + (self.has_aka? ? (" as " + @aka) : "")
end
end
class Query
def initialize
@select_statements = Array.new
end
def select(statement)
select_statement = AliasableString.new(statement)
@select_statements.push(select_statement)
select_statement
end
def print
if @select_statements.size != 0
puts "select"
@select_statements.each_with_index {| select, i|
puts select
}
end
end
end
# Example usage
q0 = Query.new
q0.select("This is a select statement")
.select("Here's another one")
.as("But this one has an alias")
.select("This should be passed on to the parent!")
q0.print
我還沒有完全實現打印。 AliasableString需要將@string和@aka分開,以便稍後將它們分開。
發佈父類和子類。 – jcm
沒有「父實例」。只有實例。要麼你想返回'Parent.new'或者你有一個父實例,並且可以返回它。 – mudasobwa
'子對象不會繼承父'''我想要父實例,而不是父類'... wat。 – jkrmr