問題タブ [fsunit]
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.
inheritance - オブジェクト式とエラー FS0419: 'base' 値は、オーバーライドされたメンバーの基本実装を直接呼び出すためにのみ使用できます
タイトルのエラーはあいまいですが、グーグルで検索すると、現在 SO で 2 つのヒットと合計で 5 つのヒットが表示されます (これは珍しい獣であることを示唆しているため、ここにあまり多くの訪問を期待しないでください ;)。この質問はそのリストの6番目になると思います:p。
このスレッドでの Kvb の回答は、エラー テキストが誤解を招きやすく、クロージャー内から base を呼び出すと発生することを示唆していますが、これが機能するため、常にそうであるとは限りません。
しかし、これは失敗します(問題を例示するために私が見つけた最も簡単な方法):
継承による型宣言の代わりにオブジェクト式を使用していましたが、カスタム NUnit 制約を作成して新しい FsUnit 制約を作成しようとしました。これは、私が見ていた問題を示す簡略版です。
現在、この動作を確認するために FsUnit を知る必要がないことは明らかです。しかし、だまされたことに気付くのに一晩と一日かかりました。実際、SOでこの質問を書いているまで、私はそれを見ませんでした。
これが機能することがわかりました:
x |> base.SomeMethod
書く代わりにbase.SomeMethod x
。
これは驚くべきことです。それがバグか機能かはわかりません。しかし、|>
演算子はインライン化されており (別の演算子でテストしました)、新しい関数を作成しないため (同様>>
に)、このエラーが発生する理由がわかりません。
実際、 (優先順位のルールなどを除いて) とf a
の間に意味的な違いは見当たりません。a |> f
では、なぜエラーが発生するのでしょうか? 私はどのルールを破っていますか?
最後の考えとして、kvb は「base
クロージャーから呼び出すことはできません... カリー化されたメンバーはクロージャーを自動的に作成します」と書いています。
このエラーの原因と原因を正確に知っている人はいますか?