Переопределить события в Haskell - PullRequest
4 голосов
/ 30 декабря 2011

Я пишу программу на Haskell с графическим интерфейсом. Когда я пишу следующий кусок кода

    onClicked btn $ do
           print 1

    onClicked btn $ do
           print 2

Нажатие btn привело к печати 1 и 2 одновременно Как я могу переопределить определение функции так, что последнее определение заменяет первое и печатает только 2

Справочная информация: я пишу игру тральщика. Когда у кнопки есть мина, она взрывается, затем я пытаюсь играть снова и определяю ту же кнопку, которую нужно очистить от мин, но нажимая ее, снова взрываю мину из-за первого определения.

Спасибо

1 Ответ

6 голосов
/ 30 декабря 2011

Используйте соединение, возвращаемое onClicked для отмены регистрации обработчиков событий:

print1Handler <- onClicked btn (print 1)
signalDisconnect print1Handler
print2Handler <- onClicked btn (print 2)

Также, onClicked устарела;когда это возможно, вам следует использовать новый механизм on.Его использование очень похоже:

print1Handler <- on buttonActivated btn (print 1)
signalDisconnect print1Handler
print2Handler <- on buttonActivated btn (print 2)
...