功能形式的sendMessage

时间:2019-02-24 09:43:59

标签: functional-programming

假设我有2个可以发送和接收消息的Messenger对象。收到消息后,它会附加到某个文件中:

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 :(得分:1)

在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!"
...

由于您的问题属于一般问题,因此我将其保留为一般问题。如果您有更具体的想法,可以扩展此答案。