2013-02-23 82 views
-2

有沒有人有關於如何在任何語言中實現lazy()方法的想法? Python示例代碼可能會是這樣的:在OOP中歸因的惰性評估?

class A: 
    def __init__(self): 
     self.result = "" 
     pass 
    def invoke(self): 
     print("invoke A") 
     self.result = "RESULT" 
    def lazy(self): 
     # I'm not sure how to write this 

class B: 
    def __init__(self, input): 
     self.input = input 
    def invoke(self): 
     print("invoke B: ", self.input) 


a = A() 
b = B(a.lazy().result)   # b needs a reference to the result of `a` before `a` is invoked 

a.invoke()      # invoke A 
b.invoke()      # invoke B: RESULT 

更多細節可以被看作here ...

答:我不認爲這是一個貧窮的問題,但有人認爲它是:

我得到了這樣的答案:

class Dynamic: 
    def __init__(self, obj, attr): 
     self._obj = obj 
     self._attr = attr 
    def __str__(self): 
     return getattr(self._obj, self._attr) 

class A: 
    def __init__(self): 
     pass 
    def invoke(self): 
     print("invoke A") 
     self.result = "RESULT" 

class B: 
    def __init__(self, input): 
     self.input = input 
    def invoke(self): 
     print("invoke B: ", self.input) 


a = A() 
b = B(Dynamic(a, "result")) 

a.invoke()      # invoke A 
b.invoke()      # invoke B: RESULT 
+0

請問什麼是lazy()方法? – 2013-02-23 16:12:11

+1

爲什麼你用java,C++或lisp標記這個?另外,在這種情況下,「懶惰」對你來說意味着什麼?我真的不知道你在問什麼。 – 2013-02-23 16:12:21

+0

@PrincessOftheUniverse我不認爲這是一個糟糕的問題 – 2013-02-24 01:01:48

回答

1

不知道如果我得到你的權利......這樣的事情?

class A: 
    def __init__(self): 
     self.result = "" 
    def invoke(self): 
     print("invoke A") 
     self.result = "RESULT" 
    def lazy(self): 
     return self.result 

class B: 
    def __init__(self, input): 
     self.input = input 
    def invoke(self): 
     print("invoke B: ", self.input()) 


a = A() 
b = B(a.lazy)     # b needs a reference to the result of `a` before `a` is invoked 

a.invoke()      # invoke A 
b.invoke()      # invoke B: RESULT 
+0

是的,像這樣,除了'self.input',因爲它應該被用作一個變量而不是一個函數.. – 2013-02-24 01:11:19