問題タブ [zig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
23 参照

metaprogramming - @call の可変長引数配列を構築する

最近Zigを習い始めました。小さなプロジェクトとして、ランダム化されたテストを作成するための小さな QuickCheck [1] スタイルのヘルパー ライブラリを実装したいと考えていました。

ただし、任意の数の引数で関数を呼び出す一般的な方法を記述する方法がわかりません。

2 つの引数で関数をテストできる簡略化されたバージョンを次に示します。

私はいくつかの異なることを試しましたが、任意の数の引数を持つ関数に対して上記のコードを機能させる方法がわかりません。

私が試したこと:

  • 配列を作成し、ループargsで埋めます。は有効なタイプではないためinline for、機能しません。[]anytype
  • 少しの comptime マジックを使用して、フィールドが の引数を保持する構造体型を構築します@call。これは、コンパイラで TODO にヒットします: error: TODO: struct args.
  • 適切な引数タプル呼び出しを返す汎用関数を記述します。サポートしたいアリティごとに 1 つの関数が必要なので、これはあまり好きではありません。antypeただし、有効な戻り値の型ではないため、とにかく機能しないようです。

私は Zig 0.9.1 を使用しています。

任意の洞察をいただければ幸いです。

[1] https://hackage.haskell.org/package/QuickCheck