假设我有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!")
与上面的程序等效的功能编程是什么?
答案 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!"
...
由于您的问题属于一般问题,因此我将其保留为一般问题。如果您有更具体的想法,可以扩展此答案。