language - f# vs c#
¿Cuáles son los beneficios de estos "autoidentificadores" flexibles en F#? (2)
Lo único que se me ocurre (y no es tan grande) es que, dado que el auto-identificador debe mencionarse explícitamente cuando se llama a un método de instancia, el hecho de poder nombrarlo le permite usar algo más corto que la palabra. Hay muchos deseos (válidos o no) en idiomas en FP en los que F # se basa en la concisión (a veces hasta el punto de exagerar) que puede haber motivado esto. Después de todo, iteri
que este deseo se muestra en otros lugares en F # donde no lo haría en, por ejemplo, en C #: iteri
nota de los nombres de funciones como iteri
que probablemente se llamarían IterateWithIndex
en C #.
Si bien entiendo self-identifiers en F #, me desconciertan los beneficios de tal flexibilidad. ¿Por qué F # no solo apoya esto? this.Blah
como hace C # y termina con esto? Supongo que algunas personas lo usan para mejorar la legibilidad, pero incluso eso parece un tramo. Entonces, ¿cuáles son los usos / beneficios de esta característica de lenguaje?
Para los no iniciados, a continuación hay un ejemplo que define un auto identificador de tipo "self" y un identificador de ámbito de método "this". El ejemplo está tomado del artículo de MSDN vinculado anteriormente.
type MyClass2(dataIn) as self =
let data = dataIn
do
self.PrintMessage()
member this.PrintMessage() =
printf "Creating MyClass2 with Data %d" data
Una pequeña ventaja es que puede usarlas para diferenciar esto de una expresión de objeto de la del tipo que la creó:
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 }
Una posible razón filosófica es que hace que parezca que this
referencia no es muy diferente de cualquier otro argumento. Si debería poder nombrar a los otros argumentos (en lugar de verse obligado a usar arg1
, arg2
, etc.), ¿por qué no podría también nombrar el primer argumento como le plazca?