2008-11-11 127 views
7

一個複雜的詞彙,沒有從一個簡單的谷歌搜索沒有很好的解釋...是否有更多的學術導向的人誰可以解釋這一個?什麼是關係參數?

回答

2

關係參數似乎是一個抽象類型的函數(如Java中的泛型)可以擁有的屬性。如果它具有這個屬性,這意味着它從不檢查它的類型參數或解構它/以某種特殊方式使用它。例如,函數「ID或增量」這裏是不是關係性參數:

public class Hey<T> 
{ 
    public T idOrInc(T var) 
    { 
     if (var instanceof Integer) 
      return (T)(new Integer(((Integer)var).intValue()+1)); 
     return var; 
    } 
    public static void main(String[] args) { 
     Hey<Integer> h = new Hey<Integer>(); 
     System.out.println(h.idOrInc(new Integer(10))); 
     Hey<Double> h2 = new Hey<Double>(); 
     System.out.println(h2.idOrInc(new Double(10))); 
    } 
} 

輸出是:

$ java Hey 
11 
10.0 
7

兩個答案都基本上是正確的。我會說參數性是多態性的一個可能性質。如果多態項在所有實例下表現相同,則多態性是參數化的。 「表現相同」是一個模糊,直觀的術語。 John Reynolds引入了關係參數作爲其數學形式化。它指出多態條款保留所有關係,這直接強制它行爲相同:

考慮f:列表 - >列表。 如果我們有關係a〜1,b〜2,c〜3,...,那麼我們可以將它提升到列表並且例如hav。現在,如果f([a,d,b,c])= [c,b,d,a]和[d,b], f保持關係,那麼f([1,4,2,3])= [3,2,4,1]。 換句話說,如果f顛倒了字符串列表,它也顛倒了數字列表。

因此,關係參數多態函數不能「檢查類型參數」,因爲它們不能根據類型來改變它們的行爲。