解决F#问题。将函数附加到类型的正确方法是什么?

塞雷娅·波哥鲁波夫

我不明白下面的代码有什么问题:

let toClass (problem:Problem<'a>) (classID:int) (items:'a list) =
        let newFreqTable = (problem.FreqTables.[classID]).count items
        { problem with FreqTables = newFreqTable :: (problem.FreqTables |> List.filter (fun i -> i.ClassID <> classID)) }
type Problem<'a> when 'a : equality with member this.toClass (classID:int) (items:list<'a>) = toClass this classID items

我有一个Problem类型,不过是一种将任意数量的分组的方法FreqTables-“频率表”的简称。因此,toClass方法只需要使用适当的freqTable(通过classID参数)并返回一个新的-具有计算的给定项。

let typeIndependentCall = toClass p 0 ["word"; "word"; "s"] // this works perfectly

let typeDependentCall = typeIndependentCall.toClass 1 ["word"; "s"] 
// gives an error: "One or more of the overloads of this method has 
// curried arguments. Consider redesigning these members to take 
// arguments in tupled form".

我对F#和函数式编程非常陌生。将行为附加到我的类型上的正确方法是什么?

里德·穆拉尼(Reed Mullanix)

在F#中,有两种将参数传递给函数的主要方法:curried和tupled。咖喱形式是您在上面的代码中使用的形式,它具有一些关键的好处,首先是部分应用程序。

例如,而不是思考

fun add a b = a + b

作为一个接受2个参数并返回值的函数,我们可以将其视为一个参数的函数,该参数返回一个具有一个参数的函数这就是为什么我们的函数的类型签名是

Int -> Int -> Int

或者,更清楚地说,

Int -> (Int -> Int)

但是,当重载方法时,我们只能使用元组参数形式

(Int, Int) -> Int

这样做的原因是优化,讨论在这里

要使代码正常工作,请使用

type Problem<'a> when 'a : equality with member this.toClass (classID:int, items:list<'a>) = toClass this classID items

并这样称呼它:

let typeDependentCall = typeIndependentCall.toClass(1, ["word"; "s"]) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 jQuery 事件处理程序附加到将重复替换的 dom 元素的正确方法是什么?

将变量附加到字符串的正确方法是什么?

将索引项附加到对象的正确ES6方法是什么?

将 HTML 字符串附加到 Iframe 导致语法错误,正确的方法是什么?

将Authorization标头附加到Ajax请求的正确方法是什么?

C#将函数附加到属性设置器的最短方法(最少的文本量)是什么?

将“(0)”附加到此关闭函数的目的是什么?

F#(+)是什么类型

F#中RavenDB Search方法的正确语法是什么

将行附加到矩阵的最佳方法是什么?

将Variant转换为正确类型的正确方法是什么?

可以附加到不同类型的父模型的子模型的正确关联是什么?

F#的标准类型事件是什么?

f#中的'seq <'a>'是什么类型?

将字符串添加到类型为char [x]的SQL Server字段中的正确方法是什么?

Angular2 / 4-将toJSON函数添加到打字稿类的正确方法是什么?

将数组传递给函数的最正确方法是什么?

F#中printfn函数的返回类型到底是什么?

函数对象的正确参数类型是什么?

解决这个矩阵的正确方法是什么

将传入的api数据附加到pandas数据框,我的函数出了什么问题?

为什么将ref类型传递到F#函数中并期望byref类型错误?

解决这个问题的 OOP 方法是什么?

使用附加构造函数和方法将 C# 类转换为 F# 类的语法

F# Bjorklund 算法:将 while 循环转换为递归函数:类型约束问题

将唯一ID附加到HTML表行中的推荐方法是什么?

将属性附加到猫鼬文档的最佳方法是什么

使用Gatsby将图像附加到节点的规范方法是什么?

将现有数据库附加到sql localdb的最佳方法是什么?