小编lam*_*ris的帖子

有没有办法在F#中封装模式?

有没有办法在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#

5
推荐指数
1
解决办法
61
查看次数

在F#中,您将什么称为定义为函数签名的类型

在F#中,是否有以下列方式定义的类型的特殊名称:

type Foo = int -> string
Run Code Online (Sandbox Code Playgroud)

我问,因为这种类型似乎具有特殊意义.与其他类型相比,它是相当抽象的,似乎只能用作一种功能接口.在F#文献中没有多少讨论,但它在许多F#OSS项目的源代码中使用得相当多.

它是一种在函数式编程中具有更广泛意义的特殊类型吗?除了作为功能的接口之外,它还有其他应用程序吗?为什么实例化实际上没有意义,即使你可以通过定义具有匹配类型签名的函数来做到这一点?或者它是否真的就像说它是函数定义的别名一样简单,然后可以在其他类型的签名/定义中用作简短形式并且考虑它的所有属性?

f#

2
推荐指数
1
解决办法
78
查看次数

等效于F#中的C#异步主体

我想知道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)

我可以显示更多的公式,但我认为这些是正确的。

我想答案的一部分在于回答其他问题

  1. “运行异步main方法意味着什么”和
  2. “使主要异步有什么意义?”

举个例子,异步main似乎主要是要使其他地方能够main以异步方式调用(在那些main不是真正“主要”的情况下,即单元测试等)。

在F#的情况下,我想至少有两件事阻止了一个仅从返回Async计算main

  1. 对状态代码强制使用int返回类型的EntryPointAttribute ...对吗? …

f# async-await f#-async

2
推荐指数
1
解决办法
163
查看次数

使用compojure.route/resources和ring.middleware.resource/wrap-resource

我正在尝试用ringcompojure学习clojure web开发,我对compojure.route/resourcesand 的用法有点不清楚ring.middleware.resource/wrap-resource.

我已经看过了API文档,以及两者的来源compojure.routering.middleware.resource.但是,我仍然不清楚是否需要使用compojure.route/resources路由和ring.middleware.resource/wrap-resource中间件,或者是否compojure.route/resources需要处理所有事情.

还是优化问题?在使用中,wrap-resource避免使用组件路由开销?任何见解将不胜感激.

clojure compojure ring

1
推荐指数
1
解决办法
3907
查看次数

标签 统计

f# ×3

async-await ×1

clojure ×1

compojure ×1

f#-async ×1

ring ×1