私はF#(とScala)で私の冒険を始めます。 FunProgの人々が話したい主な利点の1つは、型推論です。スカラ座では、私はこのような何か書くことができます。F#対Scala - なぜF#に物の種類を伝える必要がありますか?
val x = List(1,2,3)
x map ((x) => x+1)
をし、コンパイラは、xがリストであることを知っており、そのためのマップ機能のマップのバリアントを使用することを知っています。さらに、私はmap演算子を持つオブジェクト(リスト、配列、Seqなど)に関係なく、2番目のように使用できます。
一方、私が見たすべてのサンプルだから私は知っているとx
の種類が何であるかを定義する必要が明示的List.map
.Thatは、私にはほとんど意味がないし、全体が「ない否定を使用
let x = [1;2;3];;
x |> List.map(fun f -> f+1);;
:F#のについて、あなたのような何かをしなければなりません型の引数を心配する。
私はF#について何か不足していますか?これを行うより良い方法はありますか?
'map'はscalaのメソッドであり、' List.map'はF#の 'List'モジュールの関数です。利用可能な '' map''操作があることを知るには、どちらの場合でも 'x'の型を知る必要があります。 – Lee
ありがとう@Lee。私はそのマップをListのメソッドとしていますが、既知のオブジェクト(xというList型のメソッド)にメソッドを適用しているので、それを直接指定する必要があるのはなぜですか? 。 – Noam
gigglesのために、私はFSIの 'open'ing Listを試してみました。 > stdin(5,6):エラーFS0892:この宣言は、 'RequireQualifiedAccess'としてマークされたモジュール 'Microsoft.FSharp.Collections.List'を開きます。代わりに、モジュールの要素への修飾された参照を使用するようにコードを調整します。 'map'ではなく 'List.map'。この変更により、新しい構文がライブラリに追加されるたびにコードが堅牢になります。 –