sendMessage в функциональном стиле - PullRequest
0 голосов
/ 24 февраля 2019

Предположим, у меня есть 2 объекта мессенджера, которые могут отправлять и получать сообщения.Когда сообщение получено, оно добавляется в некоторый файл:

class Messenger:
    def sendMessage(anotherMessenger, message):
        anotherMessenger.receiveMessage(message)


    def receiveMessage(msg):
        # appending msg to file



a = Messenger()
b = Messenger()

a.sendMessage(b, "Hello b!")
b.sendMessage(a, "Hi a!")

Каким будет функциональный программный эквивалент вышеприведенной программы?

1 Ответ

0 голосов
/ 26 февраля 2019

В FP ваши «объекты», как правило, являются функциями.В этом случае вместо нескольких объектов, каждый с двумя функциями-членами, у вас будет несколько функций для обработки различных сценариев.

В этом случае у вас есть:

receiveMessage: string -> ()

То есть receiveMessage - это функция, которая принимает string и ничего не возвращает - unit.Аналогично:

sendMessage: (f: string -> ()) -> (msg: string) -> ()

Т.е. sendMessage принимает receiveMessage реализацию и string и возвращает unit.

Итак, используя такой язык, как F #, мы можем получить следующее:

let sendMessage (f: string -> ()) (msg: string) = f(msg)

let aRecv (msg: string) = // Do something with msg
let bRecv (msg: string) = // Do something else with msg

...

sendMessage bRecv "Hello b!"
sendMessage aRecv "Hi a!"
...

Так как ваш вопрос является общим, я оставлю это как общий ответ.Если у вас есть что-то более конкретное, этот ответ можно расширить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...