microsoft language functional ejemplos curso compilador acorde f# language-features

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?