2016-11-24 10 views
3

これら2つの関数宣言の違いは何ですか?スカラのジェネリック関数と多相引数型の違いは何ですか?

def fn[T <: A](t: T): Unit =() 

def fn(a: A): Unit =() 
+0

は、あなたが '[A]'一般的な第二の機能が欠けていますか? – Alec

+0

@Alec私は 'A'は型であり型パラメータではないと思います。 –

+0

@YuvalItzchakov。まあまあ。それ以外の場合は、どちらも機能しません。 :) – Alec

答えて

3

これはUniversal多型の2つのサブタイプである:Parametric & Inclusion(継承/サブタイプ)。彼らは自分自身の賛同を&短所だが、この特定のケースについてはの違いは、私が想像できることは、型多型のためにあなたが機能をオーバーロードする可能性を見逃している(含める多形性の貴重な部分です)。例えば

class A 
class B // extends A // - if it is needed 

class Foo { 
    def fn(t: A): Unit =() 
    def fn(t: B): Unit =() // - is OK 
} 

class Boo { 
    def fn[T <: A](t: T): Unit =() 
    def fn[T <: B](t: T): Unit =() // - is not OK (func names conflict) 
} 
関連する問題