我想在自己的类中实现IEnumerable<KeyValuePair<DateTime, 'T>>
,并将数学运算符添加到该类中,以便运算符可以在任何数字类型的'T
上像内联函数一样工作 - 自动添加约束。f#类型成员中的静态解析类型
我只是不能使下面的一段代码工作。它在成员声明中既没有也没有“inline”关键字。
另外,如果我的类型之前定义一个函数
let inline add l r = l + r
,并用它来代替另外l.Value + r.Value的,它也不起作用。
有人能告诉我我做错了什么吗?
可能整个方法都是错误的,并且有办法以另一种方式实现相同的目标?
namespace Test
open System
open System.Linq
open System.Collections.Generic
[<SerializableAttribute>]
type TimeSeries<'T>(dictionary : IDictionary<DateTime, 'T>) =
let internalList = new SortedList<DateTime, 'T>(dictionary)
interface IEnumerable<KeyValuePair<DateTime, 'T>> with
member this.GetEnumerator() = internalList.GetEnumerator()
member this.GetEnumerator() : Collections.IEnumerator
= internalList.GetEnumerator() :> Collections.IEnumerator
member private this.sl = internalList
static member inline (+) (left : TimeSeries<'T>, right : TimeSeries<'T>) =
let res =
query {
for l in left do
join r in right on
(l.Key = r.Key)
select (l.Key, l.Value + r.Value)
}
new TimeSeries<'T>(res |> dict)
下面是我知道的最简单的答案:http://tomasp.net/blog/fsharp-generic-numeric.aspx复杂的主题。 –