7

一个听起来很复杂的术语,简单的谷歌搜索没有很好的解释……还有更多的学术导向的人可以解释这个吗?

4

3 回答 3

7

两个答案大部分都是正确的。我会说参数性是多态性的一个可能属性。如果多态项在所有实例化下表现相同,则多态性是参数化的。“行为相同”是一个模糊的、直观的术语。John Reynolds 引入了关系参数化作为对此的数学形式化。它指出多态术语保留所有关系,这直观地迫使它表现相同:

考虑 f: 一个列表 -> 一个列表。如果我们有关系 a~1, b~2, c~3, ...,那么我们可以将它提升到列表并具有例如 [a, d, b, c] ~ [1, 4, 2, 3]

现在,如果 f([a, d, b, c]) = [c, b, d, a] 并且 f 保留关系,则 f([1, 4, 2, 3]) = [3, 2, 4 , 1]。换句话说,如果 f 反转字符串列表,它也会反转数字列表。

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

于 2011-03-20T14:28:08.123 回答
2

关系参数性似乎是对类型进行抽象的函数(如 Java 中的泛型)可以具有的属性。如果它具有此属性,则意味着它永远不会检查其类型参数或解构它/以某种特殊方式使用它。例如,这里的函数“id or inc”不是关系参数:

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
于 2008-11-13T07:55:37.530 回答
1

好的,只是在这里冒险一个完整的猜测,基于此

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578

我会说这是参数多态性(泛型)的数学表示。

于 2008-11-11T08:59:50.367 回答