には、JavaScriptのプロパティオブジェクト -JSオブジェクトのパターンマッチングはできますか?
let useFoo x => Js.log x##foo;
useFoo {"foo": 10};
プロパティのパターンマッチにそれを書き換える方法が-isにアクセスする機能を考えると?
私はこのような何かがうまくいくことを期待したいが、構文が無効です:
let useFoo {"foo"} => Js.log foo;
には、JavaScriptのプロパティオブジェクト -JSオブジェクトのパターンマッチングはできますか?
let useFoo x => Js.log x##foo;
useFoo {"foo": 10};
プロパティのパターンマッチにそれを書き換える方法が-isにアクセスする機能を考えると?
私はこのような何かがうまくいくことを期待したいが、構文が無効です:
let useFoo {"foo"} => Js.log foo;
あり、これを行うには方法はませんし、その理由は、そのJavaScriptオブジェクトである - より少しありますキーと値のマッピングは、Reasonのオブジェクト指向システム(OCaml's)を使用して処理されます。 Reason/OCamlでは、関数のパターンマッチングはできません。私は、パターンマッチをすることができますし、レコードのうち、FOOラムダを得るが、私は適用できないという
type t = {foo: int => int};
let bar {foo} => foo 5;
注意:私は、ラムダを適用した結果の上にラムダ、私ができないパターンマッチを含むレコードを持っている場合パターンマッチ内のfoo - 私はそれを引数 '5'に適用する必要があります。
ここではオブジェクトに関する問題があります.Reasonのオブジェクトに対する唯一のインターフェイスは公開メソッドです。メソッドはlambdaと似ていますが、最初の引数は常にselfです。これはオブジェクト自体です。したがって、x##foo
にアクセスするたびに、実際にはfoo
メソッドが送出され、x
が引数として渡され、結果が返されます。 Reason on functionアプリケーションでパターンマッチングができないのと同じように、オブジェクトは自動的に適用される関数のコレクションなので、オブジェクトに対するパターンマッチングもできません。
これに追加するだけで、JSオブジェクトは持ち上げられたOCamlオブジェクトとして型指定されますが、ReasonでJSオブジェクトを作成する構文は、実際には全く異なるものです。 '{" foo ":42}'は[%bs.obj {foo = 42}] 'になります。これは_record_を渡す構文拡張です。したがって、たとえオブジェクトのパターンを一致させることができたとしても、その構文は、オブジェクトの使用場所に応じてオブジェクトとレコードの両方に変換する必要があります。 – glennsl