С другой стороны, @
для всех намерений и целей является избыточным, и я считаю, что причины его существования как оператора в базовой библиотеке являются чисто историческими.
Я бы сказал, что было бы лучше, если бы он вышел на пенсию, и вместо него рекомендовалось бы использовать List.append
.
Сегодняшнее положение вещей таково, что @
определяется в prim-types.fs в качестве эквивалента следующей функции:
let rec (@) x y =
match x with
| [] -> y
| (h::t) -> h :: (t @ y)
и позже переэкспонирован как List.append
:
let append list1 list2 = list1 @ list2
Существует очень мало причин, по которым он должен быть представлен как оператор, в первую очередь, кроме "OCaml делает это".
На практике достаточно редко иметь действительный случай для добавления списков и многообработка коллекции в F # происходит с использованием последовательностей или других типов коллекций, которые лучше подходят для конкатенации, но не предлагают для этого выделенного оператора.Односвязные списки в значительной степени являются примером учебника структуры, к которой вы не хотите добавлять.
Таким образом, @
является чисто образовательным - кажется, что он существует только для того, чтобы запутать новичков вязык (или напомните им, что следует помнить о характеристиках производительности структур данных, которые они используют).