小编Mic*_*ael的帖子

通用高阶函数

当我将其作为本地值传递但不作为参数传递时,我是否可以使用具有不同类型参数的泛型函数?例如:

let f = id

let g (x,y) = (f x, f y)

g ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

工作正常,但如果我尝试将函数作为参数传递

let g f (x,y) = (f x, f y)

g id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

它失败,因为它采用版本f <int>并尝试将其应用两次.

我找到了一个解决方法,但它迫使我写两次我正在传递的函数:

let g f1 f2 (x,y) = (f1 x, f2 y)

g id id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)

这是我第二次遇到这个问题.

为什么它以这种方式运行,如果函数是本地值或者它作为参数传递,它不应该是相同的?

有没有办法在不重复功能的情况下执行此操作?

一个黑客,可能使用显式类型约束,内联魔术,引用?

generics f# inline

6
推荐指数
2
解决办法
1259
查看次数

标签 统计

f# ×1

generics ×1

inline ×1