我在F#中有一个自定义类,我想实现[]列表运算符,使
let myClass = new myClassObj()
let someVal = myClass.[2]
我似乎无法在网上找到这个 - 我可能不知道正确的搜索字词...提前感谢
答案 0 :(得分:5)
您只需要实现Item
索引属性。例如。
type MyClass() =
member x.Item with get(i:int) = (* some logic involving i here *)
答案 1 :(得分:5)
如果您从F# language reference开始,并转到members,其中一个主题是indexed properties。
答案 2 :(得分:5)
值得补充的是,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作为默认值。