statik olarak çözülmüş türler Kendi sınıfımda IEnumerable<KeyValuePair<DateTime, 'T>>
uygulamak ve operatörlere 'T
sayısal türlerinde satır içi işlev gibi çalışacak şekilde matematik işleçleri eklemek istiyorum - otomatik olarak kısıtlamalar ekleyin.f # Tür üyelerinde
Aşağıdaki kod çalışmasını yapamıyorum. Üye beyannamede ne 'inline' anahtar kelimesi ne de 'inline' anahtar sözcüğü ile çalışmaz. Ayrıca
I. tipteki önce fonksiyonunu
let inline add l r = l + r
tanımlar ve ekleme l.Value + r.Value yerine kullanılırsa, o da çalışmaz.
Birisi bana yanlış yaptığımı gösterebilir mi?
Muhtemelen bütün yaklaşım yanlıştır ve aynı hedefe ulaşmak için başka bir yol var mıdır?
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)
İşte bildiğim soruya en basit cevap: http://tomasp.net/blog/fsharp-generic-numeric.aspx Karmaşık konu. –