私はrubyのC拡張機能を開発しています。アクセスしているCライブラリの関数の1つは、ruby-worldのオプションハッシュに自然に変換されるように見えるオプション構造体を受け取ります。
ルビー側のハッシュが特定のオプションの値を定義していない場合、構造体は既知のデフォルト値で初期化されます。C側では、これらの線に沿っていくつかあります。
VALUE tmp;
tmp = rb_hash_aref(r_hash, rb_str_new2("opt1"));
if(TYPE(tmp) == T_STRING){
strcpy (c_learn_param->opt1, StringValuePtr(tmp));
}else{
strcpy (c_learn_param->opt1, "default value 1");
}
今私の問題は、オプションに定義された値があるが、ルビー型がCでは意味をなさない場合です。
オプションの値でもタイプエラーを発生させる必要がありますか?それはやり過ぎのようですが、デフォルトにフォールバックする必要がありますか?デフォルトにフォールバックする際の問題は、ユーザーが{"opt1" => 123}を渡すと、悪い考えのように思われるopt1を定義していない場合と同じ動作が表示されることです。フォールバックして、ルビーの警告を出力する必要がありますか?(人々はそれらを読むことさえありますか?)