我在F#的自定義類,我想要實現的[]列表操作,使得F#在類上實現list []運算符?
let myClass = new myClassObj()
let someVal = myClass.[2]
我似乎無法找到該網頁上 - 我可能不知道正確的術語搜索...提前致謝
我在F#的自定義類,我想要實現的[]列表操作,使得F#在類上實現list []運算符?
let myClass = new myClassObj()
let someVal = myClass.[2]
我似乎無法找到該網頁上 - 我可能不知道正確的術語搜索...提前致謝
你只需要實現一個Item
索引屬性。例如。
type MyClass() =
member x.Item with get(i:int) = (* some logic involving i here *)
如果你開始在F# language reference,並轉到members,議題之一是indexed properties。
值得一提的是,F#還支持切片語法(在索引的專有名稱 MSDN頁面上未提及)。這意味着您不僅可以爲單個元素(如m.[0]
)編制索引,而且還可以編制諸如m.[0..5]
或無限範圍m.[5..]
的片段。這對於各種數值數據類型(如矩陣)非常有用。
要支持此功能,該類型必須定義GetSlice
方法。下面的例子演示了這種使用2D場景:
type Foo() =
member x.GetSlice(start1, finish1, start2, finish2) =
let s1, f1 = defaultArg start1 0, defaultArg finish1 0
let s2, f2 = defaultArg start2 0, defaultArg finish2 0
sprintf "%A, %A -> %A, %A" s1 s2 f1 f2
> let f = new Foo()
f.[1.., 1..10];;
val it : string = "1, 1 -> 0, 10"
的參數是int option
型的,在這裏我們使用defaultArg
爲默認值指定爲0。
非常感謝 - 我會去哪裏找到更多像這樣的事情(在[]上搜索網頁或索引或列表中沒有吸引人的信息] – akaphenom 2010-04-22 01:28:59
@ak指的是F#的源代碼。 matrix.fs中的一個很好的矩陣實現。 – 2010-04-22 01:40:26