2016-01-03 4 views
3

В настоящее время я пытаюсь использовать интерпретатор IronPython. Выполняя Учебное пособие, я сталкивался с делегатами и обработчиками событий. Учебник делает что-то вроде этого:functools.partial as IronPython EventHandler

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 obje кт не отозваны хотя и callable(partial(print, "Changed: ")) возвращается True

С помощью этого обходного обработчик принимается:

w.Changed += partial(print, "Changed: ").__call__ 

Мой вопрос:

Почему это partial объект не принят в качестве обработчика события. Это ошибка?

+1

Звучит как lambdas или фактическая функция, которая может использоваться как обработчики событий, а не произвольные (вызываемые) объекты. Я бы не назвал это ошибкой, более неудачной несовместимостью. –

ответ

0

Это, вероятно, не решение, можно было бы ожидать, но есть проблема, открытая для пары лет - https://github.com/IronLanguages/main/issues/808

не работает в 2.6.2 и 2.7b1 на .NET Версия: 4.0 .30319.1 ipy26 testcase-26482.py

Объект не подлежит вызову.

ipy27 testcase-26482.py

Объект не callable.py

testcase-26482.py

Объект не вызываемым.

 Смежные вопросы

  • Нет связанных вопросов^_^