gpt4 book ai didi

f# - 功能范例中的可插拔性

转载 作者:行者123 更新时间:2023-12-01 10:00:16 25 4
gpt4 key购买 nike

在项目中处理可插拔性的正确功能方法是什么?我正在使用 F# 开发一个新的开源项目,似乎无法摆脱插件和接口(interface)的面向对象的想法。我希望能够换出的东西是记录器、数据存储和身份验证。

我一直在寻找这个问题的答案,但除此之外没有想出太多答案: http://flyingfrogblog.blogspot.com/2010/12/extensibility-in-functional-programming.html

最佳答案

对于不同的函数式语言,这个问题的答案会有所不同。 F# 不是纯函数式的 - 它从函数式、命令式和面向对象的世界中汲取了最好的东西。

对于日志记录和身份验证之类的事情,最实用的方法是使用接口(interface)(在 F# 中,使用接口(interface)非常好,但人们通常不使用继承,而是更喜欢组合)。

当您可以调用多个不同的函数时,一个简单的界面就很有意义:

 type IAuthentication =
abstract Authenticate : string * string -> bool
abstract ResetPassword : string * string -> void

您可以使用 object expressions ,这是在 F# 中实现接口(interface)的一种非常好的方式。如果您只有一个功能(如记录消息),那么您可以通过一个功能来参数化您的代码(这就像一个只有一个方法的接口(interface)):

 type Logger = string -> unit

对于身份验证和日志记录(在应用程序运行时可能不会更改)之类的事情,您可以使用全局可变值。虽然如果你想同步来自多个线程的请求并且有一些可变状态,写一个 F# agent 可能是个好主意。 .

关于f# - 功能范例中的可插拔性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com