2

この記事は興味深いと思います 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)、別の環境を構築するため、次の文では使用できません。

もっとシンプルに見せるコツはありますか?

4

1 に答える 1

2

どうですか

return (lambda lc: lambda x,*y:lc[x](*y))(locals())
于 2012-07-31T03:06:09.857 に答える