2008-11-11 156 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颠倒了字符串列表,它也颠倒了数字列表。

因此,关系参数多态函数不能“检查类型参数”,因为它们不能根据类型来改变它们的行为。