2013-02-23 79 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