События и делегаты в F#

Спасибо за указатели. Я нашел следующую реализацию на основе ответа и ссылки @ GiacomoCatenazzi:

# -*- coding: utf-8 -*-
import sys
import codecs

with open("testinput.txt", "r") as ifile:
    lines = ifile.read()

with open("testout1.txt", "w") as ofile:
    for line in lines:
        ofile.write(line)

UTF8Reader = codecs.getreader('utf-8')
sys.stdin = UTF8Reader(sys.stdin)
with open("testout2.txt", "w") as ofile:
    for line in sys.stdin:
        ofile.write(line.encode('utf-8'))

Однако я не уверен, почему необходимо снова кодировать после использования codecs.getreader?

Пол [ 114]

6
задан Ali 16 February 2009 в 23:58
поделиться

3 ответа

Я играл много с этим, и это - код та работа.

bar.add_Ready(fun msg -> Console.WriteLine(msg))

Я не знаю, как теоретически исправляют его, всего лишь, это хорошо работает.

Кто-либо может подтвердить, что это корректно?

4
ответ дан 8 December 2019 в 12:23
поделиться

Просто для уточнения - более короткая версия должна правильно быть:

bar.Ready.Add(fun msg -> System.Console.WriteLine(msg))  

Поскольку F# автоматически не преобразовывает функции лямбды в делегатов - но существует Добавить метод, который берет функцию. Это может затем быть записано еще более простой как это:

bar.Ready.Add(System.Console.WriteLine)  

Поскольку F# позволяет Вам использовать участников.NET в качестве первоклассных функций.

9
ответ дан 8 December 2019 в 12:23
поделиться

Попробуйте это -

bar.Ready.AddHandler(new Agent.ReadyHandler (fun sender msg -> System.Console.WriteLine(msg)))
6
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: