3
我試圖將使用ffi/vector的f32vector的球拍程序轉換爲類型球拍程序,該程序需要通過require/typed提供f32vector的註釋。然而f32vector是可變的;它可以採用可變數量的參數,因此以下兩種情況都可以接受:類型球拍中可變參數的類型是什麼?
(f32vector 1.0 3.0 4.0 7.0)
(f32vector 2.0 2.1)
我該如何編寫此函數的類型註釋?
我試圖將使用ffi/vector的f32vector的球拍程序轉換爲類型球拍程序,該程序需要通過require/typed提供f32vector的註釋。然而f32vector是可變的;它可以採用可變數量的參數,因此以下兩種情況都可以接受:類型球拍中可變參數的類型是什麼?
(f32vector 1.0 3.0 4.0 7.0)
(f32vector 2.0 2.1)
我該如何編寫此函數的類型註釋?
假設你已經有一個不透明的類型F32Vector
,那麼你可以這樣寫類型:
(require/typed ffi/vector
[f32vector (Real * -> F32Vector)])
如果你沒有一個不透明的類型呢,你可以導入這樣的:
(require/typed ffi/vector
[#:opaque F32Vector f32vector?])
當然,你可以將上面的子句合併成一個單一的require/typed
。
邊注:在未來,類型化的球拍可能還支持用於寫入合同(包括休息參數)的符號相匹配的->*
類型構造。另外,希望我們可以提供typed/ffi/vector
以及其他捆綁庫。
您可能想在這裏使用'Float'或者甚至'Single-Float'而不是'Real'。 –
謝謝,那就是我正在尋找的東西。某些時候將其添加到Typed Racket文檔可能會很有用,或者更容易找到它是否已經存在。 – LogicChains
沒問題。類型球拍指南在第4.8.1節中解釋了這種語法,但可能不夠清楚或容易找到。如果您對如何改進它有任何建議,請隨時提交更改請求,寫信給郵件列表,或者在IRC上ping我們其中一位。 –