2
宣言せずにScalaの関数を作成します:明示的に私は簡単な関数を作成したいタイプ
def sum(a,b) = a + b
しかし、その後、それはコンパイルされませんが、私は
あるdef sum(a:Int, b:Int) : Int = a + b
をしなければなりませんコードや型にはるかに長い。それは私がOCamlの中でやるだろうと同じように、タイプを指定せずにそれを行うことが可能です:
let sum x y = x + y
を参照してください。Scalaは静的型付けされた言語です。どのようにしてコンパイラが 'a'と' b'の型を推測すると思いますか? +演算子は任意の2つの型に適用できます。 –
@YuvalItzchakovまあ、静的に型付けされているので、実際にはそれを正確に推測すると期待しています;)これはうまくいきませんが、Scalaの特定の型システムの人工物であるのに対し、Haskellのような多型、 'sum ab = a + b'は' forall aのような型を得ます。 Num a => a - > a - > a'となる。これは、不自然さがなく、型クラスが閉じられているために行うことができますが、Scalaではそうではありません。 – phg
@phgしかし、どのようにタイプ推論は、あなたが2つの 'Int'を参照していて、2つの' String'を参照していないと思いますか? –