functools.partial 作为 IronPython 事件处理程序
functools.partial as IronPython EventHandler
我目前正在试用 IronPython
解释器。在学习教程时,我遇到了委托和事件处理程序。本教程执行如下操作:
from System.IO import FileSystemWatcher
w = FileSystemWatcher()
def handle(*args):
print args
w.Changed += handle
所以我想变得聪明并这样做:
from System.IO import FileSystemWatcher
from __future__ import print_function
from functools import partial
w = FileSystemWatcher()
w.Changed += partial(print, "Changed: ")
失败:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Object is not callable.
其中 line 1
指的是(交互式会话)
中的最后一行
所以 IronPython 认为 partial
对象不可调用,尽管 callable(partial(print, "Changed: "))
returns True
有了这个解决方法,处理程序被接受:
w.Changed += partial(print, "Changed: ").__call__
我的问题:
为什么 partial
对象不被接受为事件处理程序。这是一个错误吗?
这可能不是解决方案,人们可以预料,但有一个问题,已经开放几年了 - https://github.com/IronLanguages/main/issues/808
Doesn't work in 2.6.2 and 2.7b1 on .NET Version: 4.0.30319.1 ipy26
testcase-26482.py
Object is not callable.
ipy27 testcase-26482.py
Object is not callable.py
testcase-26482.py
Object is not callable.
我目前正在试用 IronPython
解释器。在学习教程时,我遇到了委托和事件处理程序。本教程执行如下操作:
from System.IO import FileSystemWatcher
w = FileSystemWatcher()
def handle(*args):
print args
w.Changed += handle
所以我想变得聪明并这样做:
from System.IO import FileSystemWatcher
from __future__ import print_function
from functools import partial
w = FileSystemWatcher()
w.Changed += partial(print, "Changed: ")
失败:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Object is not callable.
其中 line 1
指的是(交互式会话)
所以 IronPython 认为 partial
对象不可调用,尽管 callable(partial(print, "Changed: "))
returns True
有了这个解决方法,处理程序被接受:
w.Changed += partial(print, "Changed: ").__call__
我的问题:
为什么 partial
对象不被接受为事件处理程序。这是一个错误吗?
这可能不是解决方案,人们可以预料,但有一个问题,已经开放几年了 - https://github.com/IronLanguages/main/issues/808
Doesn't work in 2.6.2 and 2.7b1 on .NET Version: 4.0.30319.1 ipy26 testcase-26482.py
Object is not callable.
ipy27 testcase-26482.py
Object is not callable.py
testcase-26482.py
Object is not callable.