有没有办法在F#中封装模式?
例如,而不是写这个......
let stringToMatch = "example1"
match stringToMatch with
| "example1" | "example2" | "example3" -> ...
| "example4" | "example5" | "example6" -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在这些方面完成某些事情......
let match1to3 = | "example1" | "example2" | "example3"
let match4to6 = | "example4" | "example5" | "example6"
match stringToMatch with
| match1to3 -> ...
| match4to6 -> ...
| _ -> ...
Run Code Online (Sandbox Code Playgroud) 在F#中,是否有以下列方式定义的类型的特殊名称:
type Foo = int -> string
Run Code Online (Sandbox Code Playgroud)
我问,因为这种类型似乎具有特殊意义.与其他类型相比,它是相当抽象的,似乎只能用作一种功能接口.在F#文献中没有多少讨论,但它在许多F#OSS项目的源代码中使用得相当多.
它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为功能的接口之外,它还有其他应用程序吗?为什么实例化实际上没有意义,即使你可以通过定义具有匹配类型签名的函数来做到这一点?或者它是否真的就像说它是函数定义的别名一样简单,然后可以在其他类型的签名/定义中用作简短形式并且考虑它的所有属性?
我想知道main在F#中相当于C#异步。更重要的是,main在F#程序中是否有使用/使用异步方法的特殊方法,还是只是等待完成?
更具体地说,假设我们正在使用.NET Core通用主机。
在C#程序中,main可能看起来像这样:
class Program
{
static async Task Main(string[] args)
{
await new HostBuilder().Build().RunAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
在F#程序中,我的本能是做这样的事情:
[<EntryPoint>]
let main args =
HostBuilder().Build.RunAsync().Wait()
Run Code Online (Sandbox Code Playgroud)
...要么...
[<EntryPoint>]
let main args =
HostBuilder().Build.RunAsync() |> Async.AwaitTask |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)
...要么...
[<EntryPoint>]
let main args =
async {
return HostBuilder().Build.RunAsync() |> Async.AwaitTask
} |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)
...或者只是避免异步...但这没意思...
[<EntryPoint>]
let main args =
HostBuilder().Build.Run()
Run Code Online (Sandbox Code Playgroud)
我可以显示更多的公式,但我认为这些是正确的。
我想答案的一部分在于回答其他问题
举个例子,异步main似乎主要是要使其他地方能够main以异步方式调用(在那些main不是真正“主要”的情况下,即单元测试等)。
在F#的情况下,我想至少有两件事阻止了一个仅从返回Async计算main:
我正在尝试用ring和compojure学习clojure web开发,我对compojure.route/resourcesand 的用法有点不清楚ring.middleware.resource/wrap-resource.
我已经看过了API文档,以及两者的来源compojure.route和ring.middleware.resource.但是,我仍然不清楚是否需要使用compojure.route/resources路由和ring.middleware.resource/wrap-resource中间件,或者是否compojure.route/resources需要处理所有事情.
还是优化问题?在使用中,wrap-resource避免使用组件路由开销?任何见解将不胜感激.