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

这种灵活的做法有什么好处;自我标识符“;在F#中?,f#,language-features,F#,Language Features,虽然我理解F#,但我对这种灵活性的好处感到困惑。为什么F#不只是像C#那样支持这个.Blah?我猜有些人会用它来提高可读性,但即使如此,这似乎也有点牵强。那么,这种语言功能的用途/好处是什么 对于un-initiated,下面的示例定义了类型范围的自标识符“self”和方法范围的标识符“this”。该示例取自上面链接的MSDN文章 一个小优点是,您可以使用它们来区分对象表达式的this与创建它的类型: type IExample = abstract GetAnObject : unit -&g

虽然我理解F#,但我对这种灵活性的好处感到困惑。为什么F#不只是像C#那样支持
这个.Blah
?我猜有些人会用它来提高可读性,但即使如此,这似乎也有点牵强。那么,这种语言功能的用途/好处是什么

对于un-initiated,下面的示例定义了类型范围的自标识符“self”和方法范围的标识符“this”。该示例取自上面链接的MSDN文章


一个小优点是,您可以使用它们来区分对象表达式的
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 }

一个潜在的哲学原因是,它使
这个
参考似乎与任何其他论点没有太大区别。如果您应该能够命名其他参数(而不是被迫使用
arg1
arg2
,等等),那么为什么您也不能随心所欲地命名第一个参数呢?

这是我唯一能想到的(而且它并不大)这是因为在调用实例方法时必须显式引用自标识符,因此能够命名它可以让您使用比单词
this
更短的内容。在FP语言上有很多(有效或无效)的愿望,F#是基于简洁(有时甚至过度)的,这可能促使了这一点。毕竟,你会注意到这种愿望在F中的其他地方也会表现出来,而在C中则不然——注意像
iteri
这样的函数名,它可能会在C中被称为
IterateWithIndex

所以你可以这样做:
成员this.this=this
当然@gradbot-我怎么样?我们不想让来自VB的大量程序员感到被冷落。我想不出任何令人信服的好处。我希望我能写
member\uu.PrintMessage()=
,表明我没有使用
这个
@Tim Robinson:这不太一样,但我通常使用uu(即双下划线)为了表明我没有使用关于JavaScript中
this
奇怪的上下文敏感行为的自引用思想,以及它的简单性(没有双关语的意思)似乎很好。这是一个相当好的优势。我想我会提到,在Java中,您可以使用
MyClass访问外部实例。我想我更喜欢Java的方法,同样是为了一致性。哦,这是一个有趣的哲学论点,但是,我认为如果每个函数都只有一个论点,我会满足于被迫使用
arg
:)@斯蒂芬-我现在可以看到你的代码了:
let x arg=let y arg=let z arg=arg+arg;z-arg;y arg
:)@Daniel-我更喜欢y中的x=(fun arg->(let y=(fun arg->(let z=(fun(arg:int)->arg+arg;arg;1)in z))
;)
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 }