虽然我理解F#中的self-identifiers,但我对这种灵活性的好处感到困惑。为什么F#不仅仅支持this.Blah
作为C#并且完成它?我猜有些人用它来提高可读性,但即便如此,这似乎是一个延伸。那么,这种语言功能的用途/好处是什么?
对于未启动的,下面是一个示例,它定义了类型范围的自身标识符“self”和方法范围标识符“this”。该示例来自上面链接的MSDN文章。
type MyClass2(dataIn) as self =
let data = dataIn
do
self.PrintMessage()
member this.PrintMessage() =
printf "Creating MyClass2 with Data %d" data
答案 0 :(得分:17)
一个小优点是你可以使用它们来区分对象表达式的this
和创建它的类型的对象:
type IExample = abstract GetAnObject : unit -> obj
type MyClass() =
member outer.Example1 = { new IExample with member inner.GetAnObject() = upcast inner }
member outer.Example2 = { new IExample with member inner.GetAnObject() = upcast outer }
一个潜在的哲学原因是,它使得this
引用看起来与其他任何参数都没有太大区别。如果你应该能够命名其他参数(而不是被迫使用arg1
,arg2
等),那么为什么你不能随意命名第一个参数,太?
答案 1 :(得分:1)
我唯一可以提出的(并且它并不大)是因为在调用实例方法时必须明确地引用自标识符,因此能够命名它可以让你使用比单词{{更短的东西。 1}}。在FP语言中有很多(有效或无效)的语言,F#的基础是简洁性(有时甚至是过度使用它),这可能促使了这一点。毕竟,你会注意到这种欲望在F#中的其他地方显示出来,而不是在例如C# - 注意函数名称,如this
,可能在C#中被称为iteri
。