'T
の演算子がインライン関数のように機能するように、私自身のクラスにIEnumerable<KeyValuePair<DateTime, '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複雑な主題。 –