首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将F# (double -> double)转换为Func<double,double>?

如何将F# (double -> double)转换为Func<double,double>?
EN

Stack Overflow用户
提问于 2015-04-30 08:36:52
回答 2查看 210关注 0票数 1

我正在使用MathNet.Numerics.LinearAlgebra构建一个库。我需要将用户指定的函数应用到矩阵的每个元素上,我知道我可以对其使用Map

代码语言:javascript
复制
open System
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.LinearAlgebra.Double

let m1 = matrix [[1.0; 2.0; 3.0]]
let f1 = fun s -> s * 3.14
let m2 = m1.Map f1 // THIS FAILS
let m3 = m1.Map (fun s -> s * 3.14) // THIS WORKS!

m2的行中,我得到以下错误:

代码语言:javascript
复制
This expression was expected to have type Func<float, 'a> but here has type double -> double

但是我需要能够传递映射函数,而不是像m3那样内联地定义它。MathNet.Numerics的文档似乎对我的问题没有答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-30 08:50:59

您可以像这样构造委托:

代码语言:javascript
复制
let m2 = m1.Map (Func<_, _> f1)

在某些情况下,F#隐式地构造委托,如问题中的lambda所示,但它并不总是无缝的。有关其他信息,请参见用于F#中委托的MSDN页面

票数 4
EN

Stack Overflow用户

发布于 2015-04-30 10:05:27

F#扩展(MathNet.Numerics.FSharp包)通常提供一个可以处理正常F#函数的变体。在这种情况下,您可以写:

代码语言:javascript
复制
let m2 = m1 |> Matrix.map f1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29962895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档