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

ben*_*ruk 20 f# language-features

虽然我理解F#中的自我标识符,但我对这种灵活性的好处感到困惑.为什么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
Run Code Online (Sandbox Code Playgroud)

kvb*_*kvb 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 }
Run Code Online (Sandbox Code Playgroud)

一个潜在的哲学原因是它使得它似乎与this任何其他论证都没有太大的不同.如果你应该能够命名其他参数(而不是被迫使用arg1,arg2等等),那么为什么你不能随意命名第一个参数呢?

  • 想想JavaScript中"this"的奇怪的上下文敏感行为,这种简单(没有双关语)似乎很棒. (5认同)
  • @Stephen - 我现在可以看到你的代码:`let x arg = let y arg = let z arg = arg + arg; z arg; y arg` :) (5认同)