問題タブ [dialyzer]
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.
types - Elixir の型仕様とパラメータ化された型変数
Elixir の型と関数の仕様でパラメーター化された型と型変数を組み合わせる方法を見つけようとしています。Stack
簡単な例として、モジュールを定義しているとしましょう:
3 行目のパラメーター化された型仕様を使用して、整数のみを含む新しいスタックを作成する関数を定義できます。
ここまでは順調ですね。ここで、整数のみをこのスタックにプッシュできるようにしたいと思います。たとえば、ダイアライザーはこれで問題ないはずです。
しかし、ダイアライザーはこれについて文句を言うべきです:
push
それを強制するために関数の型仕様がどうあるべきかわかりません。Erlang では、次の構文でうまくいくと確信しています。
Elixir を使用してこの制約を表現する方法はあり@spec
ますか?
types - Elixir、Dialyzer、タイプおよびサブタイプに関する警告
「-Woverspecs」を指定して Dialyzer を実行していますが、次の警告が表示されます。
このコードで:
私がやりたいのは、ガードを使用して関数型を突き止めて、サブタイプ警告が消え、関数の正確な定義が得られるようにすることです。
-Woverspecs が推奨されていないことを Erlang のドキュメントで確認しました。私が考えられる唯一の解決策は、複雑な関数ガードです...
アイデアや指針はありますか?
erlang - Dialyzer がこの単純なエラーを検出しないのはなぜですか?
Dialyzer は、この関数の戻り値の型に矛盾があることを通知しません。
しかし、最後の行が
これはなぜですか?上記は非常に単純なケースであると思います。
ありがとう
erlang - Dialyzer は、関数が呼び出されないことを示しています。
私は elixir_talk ライブラリを使用しています。接続後、beanstalkd に接続したらプライベート関数を呼び出したいと思います。typespec を追加して、Dialyzer を実行しました (dialyxir 経由)。エラーが発生します:
これを生成する私が見つけることができる最小限の例は
ElixirTalk.connect
への呼び出しを代わりにへの呼び出しに置き換えるとspawn
、Dialyzer は問題を報告しなくなります。
ここでDialyzerが混乱している理由を誰か知っていますか?
protocols - プロトコルのダイアライザー エラーを回避するには?
シンプルなプロトコルでは、2 種類のダイアライザー警告が表示されます。
私が理解できない警告はこれです:
@spec
また、警告を黙らせるためにここで機能する a もわかりませんでした。
他の種類の警告は、他の場所で議論されています – 多くの「未知の機能」がリストされています:
(等。)
@spec
で使用できるはありdefprotocol
ますか? 例は見つかりませんでした。または、ソースコードで、defprotocol
ダイアライザーによって無視されるようにマークする方法はありますか?
編集:最初のエラーの完全な修正は次のとおりです。
types - 構造体のダイアライザー エラー
以下は Elixir 1.3 での最小限の壊れた例です:
これは、タイプ チェックに失敗します: foo.ex:9: The variable _@1 can never match since previous clauses completely covered the type #{'__struct__':='Elixir.Foo', _=>_}
。
私は検索して検索しましたが、これが何を意味するのか、またはそれを修正する方法の説明を見つけることができません。
erlang - ダイアライザーの結果を理解する
私は次の機能を持っています:
そして、ダイアライザーを実行すると、次の出力が得られます。
私はダイアライザーを初めて使用し、ダイアライザーの出力を解釈するのに苦労しています。関数の最初の 5 つの句が [] に一致しないと言っているのは理解していますが、6 番目の句で空のリストを一致させているため、これは私の意図によるものです。
私の erlang のバージョンは Erlang/OTP 19.0 で、ダイアライザーのバージョンは v3.0 です。
興味深い発見は、dialyzer v2.8 と Erlang/OTP 18 を別のマシンで実行したときに、dialyzer が上記のコードについて文句を言わないことです。
私がこれまでに試したこと:
私は erlang のバイナリの経験があまりないので、最初はバイナリ パターン マッチングを誤解していたのではないかと思いましたが、そうではないようです。関数は私のテスト ケースに合格します (パラメーターとして [] を使用して関数を呼び出すことは問題ありません)。また、関数の先頭でバイナリを通常の文字列に置き換えると、ダイアライザーから同じ苦情が発生します。
plt を再構築し、プロジェクトをクリーンアップしました
前もって感謝します