F#中这种灵活的“自我标识符”有什么好处?

时间:2011-03-18 16:59:10

标签: f# language-features

虽然我理解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

2 个答案:

答案 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引用看起来与其他任何参数都没有太大区别。如果你应该能够命名其他参数(而不是被迫使用arg1arg2等),那么为什么你不能随意命名第一个参数,太?

答案 1 :(得分:1)

我唯一可以提出的(并且它并不大)是因为在调用实例方法时必须明确地引用自标识符,因此能够命名它可以让你使用比单词{{更短的东西。 1}}。在FP语言中有很多(有效或无效)的语言,F#的基础是简洁性(有时甚至是过度使用它),这可能促使了这一点。毕竟,你会注意到这种欲望在F#中的其他地方显示出来,而不是在例如C# - 注意函数名称,如this,可能在C#中被称为iteri