Haskell允许您定义类似三次的函数,它接受类型为a
的元素,并返回重复三次的元素列表,对于任何数据类型a
。免费的Pascal有像Haskell这样的类型变量吗?
thrice :: a -> [a]
thrice x = [x, x, x]
免费Pascal允许类型变量吗?如果没有,是否有另一种方法在Free Pascal中做到这一点?
Haskell允许您定义类似三次的函数,它接受类型为a
的元素,并返回重复三次的元素列表,对于任何数据类型a
。免费的Pascal有像Haskell这样的类型变量吗?
thrice :: a -> [a]
thrice x = [x, x, x]
免费Pascal允许类型变量吗?如果没有,是否有另一种方法在Free Pascal中做到这一点?
作为一个不知道帕斯卡的哈斯克尔人,这看起来是一个类似的东西。对不起,无法扩大。
不幸的是FreePascal的目前只有通用类,而不是通用功能。虽然,你的目标仍然可以实现,尽管有点笨拙。您需要定义一个新的类来封装你的操作:
unit Thrice;
interface
type
generic ThriceCalculator<A> = class
public
class function Calculate(x: A): array of A;
// We define it as a class function to avoid having to create an object when
// using Calculate. Similar to C++'s static member functions.
end;
implementation
function ThriceCalculator.Calculate(x: A): array of A;
begin
SetLength(Result, 3);
Result[0]:= x;
Result[1]:= x;
Result[2]:= x;
end;
end.
现在,不幸的是,当你想使用这个类与任何特定的类型,你需要专门它:
type
IntegerThrice = specialize ThriceCalculator<Integer>;
只有那么你可以使用它作为:
myArray:= IntegerThrice.Calculate(10);
正如你所看到的,帕斯卡是不是去泛型编程的方式呢。
免费Pascal在其泛型中具有类型变量(与C++模板相当)。 – 2011-10-17 20:27:18
如何使用Free Pascal的内置泛型类型? Google只会返回论坛主题。 – mcandre
请参阅monadic针对维基页面的回答。或者,您可能想转向编译器的[documentation](http://www.freepascal.org/docs.var),或者实际上是[语言参考中的相关章节](http://www.freepascal.org /docs-html/ref/refch8.html)。 – 2011-10-17 20:41:30