2014-02-10 83 views
3

我試圖將使用ffi/vector的f32vector的球拍程序轉換爲類型球拍程序,該程序需要通過require/typed提供f32vector的註釋。然而f32vector是可變的;它可以採用可變數量的參數,因此以下兩種情況都可以接受:類型球拍中可變參數的類型是什麼?

(f32vector 1.0 3.0 4.0 7.0) 
(f32vector 2.0 2.1) 

我該如何編寫此函數的類型註釋?

回答

3

假設你已經有一個不透明的類型F32Vector,那麼你可以這樣寫類型:

(require/typed ffi/vector 
       [f32vector (Real * -> F32Vector)]) 

如果你沒有一個不透明的類型呢,你可以導入這樣的:

(require/typed ffi/vector 
       [#:opaque F32Vector f32vector?]) 

當然,你可以將上面的子句合併成一個單一的require/typed


邊注:在未來,類型化的球拍可能還支持用於寫入合同(包括休息參數)的符號相匹配的->*類型構造。另外,希望我們可以提供typed/ffi/vector以及其他捆綁庫。

+1

您可能想在這裏使用'Float'或者甚至'Single-Float'而不是'Real'。 –

+0

謝謝,那就是我正在尋找的東西。某些時候將其添加到Typed Racket文檔可能會很有用,或者更容易找到它是否已經存在。 – LogicChains

+0

沒問題。類型球拍指南在第4.8.1節中解釋了這種語法,但可能不夠清楚或容易找到。如果您對如何改進它有任何建議,請隨時提交更改請求,寫信給郵件列表,或者在IRC上ping我們其中一位。 –