問題タブ [signature-files]
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.
f# - F#の署名ファイルとアクセス修飾子
私は最近、F#のオブジェクト指向の側面を学ぼうとしていて、その言語の型/モジュールへのアクセスを制限する方法に興味を持っています。
より具体的には、これを書くことの違いを知りたいです:
Example.fsi
Example.fs
代わりにこれ:
彼らは最終的にまったく同じことを達成しませんか?C#のバックグラウンドを持っているので、署名(FSI)ファイルに対してアクセス修飾子を使用する傾向があります。それらはより用途が広いようです(たとえば、名前空間のモジュール/タイプに適用できます)が、署名ファイルがアクセス修飾子が提供しないものを提供する状況はありません。
f# - F# 署名ファイル エラー
fsi ファイルを使用して、個別のファイルで相互に再帰的なクラスを許可しようとしましたが、fsi ファイルがコンパイルされませんでした。以下は、問題を示す簡単な例です。
ファイル program.fs:
ファイル File1.fs:
でコンパイルすると、以下が--sig:signature.fsi
生成されます。
行にエラーがあるのはどれですか
どれが
f# - f#: Intellisense が不平を言う署名ファイル?
次のコードを考えると...
...これを含む署名ファイルを作成すると、Intellisenseが文句を言い、コンパイラが失敗します。
エラーはError 10 Module 'MyModule' contains val myFnTrue : ('_a -> bool) when '_a :> MyModule.IMyInterface but its signature specifies val myFnTrue : (MyModule.IMyInterface -> bool) The types differ
です。( についても同様のエラーが報告されていmyFnFalse
ます。)
これが分からないなんて馬鹿みたい。私は何を間違っていますか?(「当然」の答えに備えて...)
f# - F# はコンストラクターの存在を否定します (おそらく型制約関連)
次のコードで、F Sharp は次のように述べています。モジュール xyz には値が必要ですnew : (IBlah<'a> * 'b) -> test<'a, 'b>')
その正確なコンストラクターを明示的な new として提供しようとしましたが、タイプは同じでしたが、Intellisense は役に立たなかったようです。どういうわけか制約が間違っていると思います。コードがコンパイルされるように(制約を削除せずに)何を変更すればよいか教えてください。どうもありがとう。
最初に fsi ファイル:
fs ファイルは次のとおりです。
inheritance - fsharp署名ファイルの抽象クラスから継承する方法は?
FSharp でドメインをモデル化しようとしています。そして、クライアント コードでこれらの型へのクリーンなアクセスを体験してほしいと思います。その一部は、ここで説明されている署名ファイル (.fsi) を作成することです: https://msdn.microsoft.com/en-us/library/dd233196.aspx
Microsoft のページでは、FSharp 署名ファイルで継承がどのように機能するかについて説明していません。ここで「interface」キーワードを使用してインターフェースの実装を示す方法を発見しました: https://github.com/intellifactory/websharper.ui.next/blob/master/WebSharper.UI.Next/Attr.fsi
良い。しかし、私はそれをさらに一歩進めて、抽象クラスから継承し、署名ファイルでそれを示したいと思いました。
目標はポリモーフィズムです。どこかで、関数にパラメーター「v」を次のように取りたいと思います: (v : S list) ここで、S はスーパータイプであり、リストはそのサブタイプの値で構成される場合があります。
しかし、抽象クラスから継承するための fsharp 署名ファイルの構文は何ですか?
「Artefact.fs」には次のものがあります (はい、Websharper プロジェクトです):
そして、「Visual.fsi」には次のものがあります。
「継承」行はコンパイルされません。では、正しい構文は何ですか?
私はこれらを試しました(これも機能しません):
1) アーティファクトの後の括弧
2) Visual の後の括弧
何か案は?