我发现这篇文章看起来很有趣 http://okmij.org/ftp/Scheme/oop-in-fp.txt
所以我尝试用Python编写类似于类的闭包(只是一个玩具):
def clos(x,y):
def getx():
print(x)
def gety():
print(y)
def setx(i):
nonlocal x
x = i
def sety(i):
nonlocal y
y = i
lc = locals()
return lambda x,*y:lc[x](*y)
k=clos(1,2)
k("getx")
k("gety")
k("setx",2)
k("getx")
但是,我认为lc = locals()
看起来很笨拙。但我不能在下面的句子中使用return lambda x,*y:locals()[x](*y)
,因为它会构建一个不同的环境。
有什么技巧可以让它看起来更简单吗?
答案 0 :(得分:2)
怎么样
return (lambda lc: lambda x,*y:lc[x](*y))(locals())