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