2015-12-11 5 views
0

Есть ли более короткий способ сделать это?Вызов метода/ярлыка свойств

Seq.map (fun x -> x.SomeFunction()) xs 
Seq.map (fun x -> x.SomeProperty) xs 

Это явно не работает

Seq.map SomeFunction() xs 
Seq.map SomeProperty xs 

который позволил бы что-то вроде этого более просто

Seq.map (SomeProperty >> fn1 >> fn2) xs 

Я использую Seq.map здесь, но нет ничего особенного Это. Есть много других функций, для которых это было бы хорошо. Я потратил некоторое время, чтобы посмотреть, пропустил ли я какой-нибудь синтаксический сахар где-нибудь, но не повезло.

ответ

4

В настоящее время нет синтаксиса для превращения свойств или методов в функции, но это a popular feature request. Не стесняйтесь добавлять свой голос там.

Ближайшей вещь, которую вы можете сделать, это определить функцию со статическим ограничением члена, что позволяет вызвать метод определенного имени и типа:

Например, чтобы позвонить Next : unit -> 'R вы можете использовать:

let inline next (value:^T) : 'R = 
    (^T : (member Next : unit -> 'R) value) 

Теперь вы можете написать

[ new System.Random() ] |> List.map next 

Это на самом деле не очень полезно (если вам не нужно делать это очень часто для конкретного метода или свойство), и поэтому я предпочитаю использовать только явную функцию.

+0

Использовать «новое» не обязательно;) –