問題タブ [dynamic-typing]
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.
python - Pythonでnumpyタイプを識別する方法は?
オブジェクトがnumpyタイプであるかどうかを確実に判断するにはどうすればよいですか?
この質問はダックタイピングの哲学に反していることは理解していますが、関数(scipyとnumpyを使用)がnumpy型で呼び出されない限り、numpy型を返さないようにすることが目的です。 これは別の質問の解決策になりますが、オブジェクトがnumpyタイプであるかどうかを判断する一般的な問題は、元の質問から十分に離れているため、分離する必要があります。
javascript - Javascript の変数型予測に関するリソースはありますか?
この学術論文からの引用: Syntactic and Semantic Prediction in Dynamic Languages :
IntelliSense は、実際には変数の型の知識に基づいています。したがって、変数を記述するシンボルは、既知で解決できる場合はその型を含む必要があります。さらに、動的言語では、コードのさまざまな部分やさまざまなプログラム実行で、1 つの変数がさまざまな型のインスタンスを運ぶことができます。また、変数は動的に開始することができ、その型は実行時にのみ知ることができます。したがって、シンボルには、セマンティック分析で解決された可能なタイプのリストが含まれている必要があります。しかし、一般に、動的言語では明確に解決できません。 単一のプログラムを実行しても役に立ちません。
これに関するより多くのリソースをどこで見つけることができますか。特に、上記のブロック引用で強調されたステートメント、最終的にはコードの静的分析の予測率に関する統計に興味があります。
c++ - 異なるタイプの要素をC++のベクトル/配列に格納しますか?
C++で単純な動的言語インタープリターを作成しようとしています。動的型付けされた配列を宣言できるようにしたいのですが、C++のオブジェクトにそれらを格納する方法がわかりません。
Ruby / Pythonでは、必要なものを何でも保存できますが、C ++でこれを行う効率的な方法は何ですか?
(また、誰かがRubyのような動的言語用の単純なオープンソースのレクサー/パーサー/インタープリターへのリンクを持っているなら、私はリンクをいただければ幸いです)。
haskell - これはunsafeCoerceの安全な使用法ですか?
現在、非常に恐ろしい関数unsafeCoerceを使用している状況があります。幸いなことに重要なことではありませんが、これがこの関数の安全な使用法であると思われるのか、それとも他の人が知っているこの特定の問題を解決する別の方法があるのでしょうか。
私が持っているコードは次のようなものです:
注意すべき2つの追加事項は、これらのトークンは、整数の供給が一意であることを確認するために使用するモナド内で使用されることです(つまり、同じトークンを2回作成しない)。また、STモナドと同じように、forallの定量化されたシャドウ型変数を使用して、(モジュールで公開するメソッドのみが使用されていると仮定して)トークンを返す方法がないことを確認します(実際には、 F)型エラーではなくモナドから。また、トークンコンストラクターも公開していません。
私が見る限り、これはunsafeCoerceの安全な使用法であると思います。私が強制している値は、実際には私が強制しているタイプとまったく同じであるというかなり高い確信を持って言えるでしょう。 、しかし私は間違っているかもしれません。また、Data.Typeableを使用してみましたが、これはうまく機能しますが、現時点では、Typeableの制約を回避するためにこれを試みています。特に、gcastは多くの点で同様のことを行うようであり、区別するためにトークンが必要です。同じタイプの異なるF。
ヘルプ/アドバイスをありがとうございました。
objective-c - 実行時に特定のプロパティとその戻り値の型を確認するにはどうすればよいですか?
「age」という名前のプロパティには常に「age」という名前のセレクターがあるためrespondsToSelector
、この質問が示唆するように使用できます。これにより、実行時に特定のセレクターが特定のオブジェクトに存在するかどうかがわかります。
「年齢」という名前のプロパティが存在する場合、それを確認できます。そのセレクター (そのプロパティの読み取りメソッド) がオブジェクト (id) または非オブジェクト (int) を返すかどうかを知るにはどうすればよいですか?
そのような型の決定は実行時に可能ですか、それとも目的の C の方法では、誰かがそのメソッドを使用したいと思っている型を使用してそのメソッドを実装したと常に想定していますか、それとも戻り値の型を確認できますか?
これは、XCode 4.5 で最新の Objective-C バージョン (LLVM 4.1) を使用しています。
更新: これは、私が思いついた utility-category-on-NSObject です。
この質問を調べながら、このオブジェクトのすべてのプロパティを一覧表示できる便利なユーティリティ メソッドも作成しました。
c++ - 異なるタイプの属性マップを追加する方法は?
C++(11) の設計上の問題は次のとおりです。
ノード/エッジを任意の属性にマップできるグラフデータ構造を作成したいとします。(それがグラフであることは実際には関係ありません。属性を持つ要素のコンテナである可能性がありますが、これは私の例です。)
このようなデータ構造を使用すると、すべてのノードに新しい属性を動的に追加できます。
...そしてノードに設定します:
...そして、メモリを節約するために属性も削除します。
G.addNodeMap
マップの識別子 (おそらく文字列) とエントリのデフォルト値を取ります。C++11 ではT
、「ノード マップ」の型は、与えられたデフォルトの引数から簡単に推測できます。std::vector<T>
ノードは単なるインデックスであるため、ノード マップ自体が である可能性があります。
std::vector<std::string> map1
問題: ベクトル、std::vector<std::double> map2
、std::vector<Foo> map3
....をどこに保存しますか?
この問題は、動的型付け言語では発生しません。この動作を C++ で実装するにはどうすればよいですか?
c++ - これは静的型付けで行うことができますか?
std::vector<?>
このメソッドは、キー ( ) に基づいて( ) を選択しようとしますstd::string
。ここで、?
は または のいずれint
かfloat
です。
クラスの関連メンバーは次のとおりです。
auto nodeMap
(= std::vector<?>
) が初期化されていないため、これはコンパイルされません。しかし、それを初期化するには、コンパイル時にその型を知る必要があります。
私が試みていることは、静的型付けでは実行できないかもしれません。これを達成するC++の方法はありますか?
haskell - Haskell-高度なタイプの機能で関数を単純化するのに役立ちます
Haskellで動的型付け言語のインタプリタを書いています。
ほとんどの動的型付け言語インタープリターと同様に、私のプログラムも実行時に型をチェックする必要があります。私のプログラムで最もよく使われるコードの1つはこれです:
ここでは、それp
がタイプTString
であることを確認し、その後、でそれを破棄していVStr s <- ...
ます。VStr
タイプがの唯一の値であるため、これが失敗することはありませんTString
。
私のデータ構造は基本的にこれです:
そのため、タイプに応じて値を分離しています。すなわち。型として持つ値コンストラクターは1つだけTStr
です。
今、私は自分のensureType
関数と破壊コードを単純化する方法があるかどうか疑問に思っています。たとえば、そのようなことは可能ですか?
ここで、タイプs <-
がであると推定できる後のコードから、部分を持つコンストラクターのみがであることが静的にわかっているため、がであるかどうかを動的にチェックした後に戻ります。s
String
Value
String
VStr
ensureType
String
p
VStr
これが理にかなっているのか、それとも可能なのか、私には実際にはわかりません。Haskellの高度な型システム機能を利用して設計を改善する方法を探しています。
どんな助けでもありがたいです。
heap-memory - 動的型バインディングを使用する言語では、すべての変数がヒープに割り当てられていると言えますか?
ストレージバインディングに基づくバインディングプロセスと変数の分類について研究しています。そのため、次の 4 種類の変数に直面しました。
- 静的変数: これらは実行前 (つまり、コンパイル中) にメモリにバインドされ、実行中ずっとバインドされたままです。
- スタック動的変数: これらの変数は、コンパイル時に型に静的にバインドされますが、コードの実行が宣言に到達するまでメモリ位置にバインドされません。
- 明示的なヒープ動的変数: これらの変数は、明示的な実行時のプログラマ指定の命令によって割り当ておよび割り当て解除されます。必要なメモリ セルを提供するために、スタックではなくヒープが使用されます。
- 暗黙的なヒープ動的変数: メモリ セルを含むこれらの変数のすべての属性は、値が割り当てられるときにバインドされます。
私の質問は、タイプ 2 と 4 に関するものです。タイプ ビディングが動的なプログラミング言語 (Php、Ruby、Python など) では、すべての変数がタイプ 4 のように見えます。
本当ですか?ローカル変数を含むすべての変数がヒープに置かれますか? これは実装の問題ですか、それともローカル変数がスタックに置かれ、他の変数がヒープに置かれる動的型バインディングを持つ言語を実装する可能性はありませんか?
c++ - C++ はどの程度静的型付け言語ですか?
以前は、この質問に対する答えは「100%」だと思っていましたが、最近、再考する価値のある例を指摘されました。自動保存期間を持つオブジェクトとして宣言された C 配列を考えてみましょう。
ここで、 の型foo
は明らかにint[42]
です。代わりに、次のケースを検討してください。
ここで、 の型はfoo
ですが、コンパイル時に式によって作成されたオブジェクトint*
の型をどのように判断できますか? (強調は、式によって返されるポインターについて話しているのではなく、式によって作成された配列オブジェクトについて話しているという事実を強調することを目的としています)。new
new
new
new
これは、C++11 標準のパラグラフ 5.3.4/1 が式の結果について指定しているものです。
[...] new-expressionによって作成されたエンティティには、動的ストレージ期間 (3.7.4) があります。[ 注: そのようなエンティティの有効期間は、必ずしもそれが作成されたスコープに制限されるわけではありません。—終わりの注] エンティティが非配列オブジェクトの場合、new-expressionは作成されたオブジェクトへのポインターを返します。配列の場合、new-expression は配列の最初の要素へのポインターを返します。
私は以前、C++ ではすべてのオブジェクトの型がコンパイル時に決定されると考えていましたが、上記の例はその信念を反証しているようです。また、パラグラフ 1.8/1:
[...] オブジェクトのプロパティは、オブジェクトの作成時に決定されます。オブジェクトには名前を付けることができます (条項 3)。オブジェクトには、その寿命 (3.8) に影響を与える保存期間 (3.7) があります。オブジェクトには型 (3.9) があります。[...]
だから私の質問は:
- 最後に引用した段落の「プロパティ」は何を意味していますか? 明らかに、オブジェクトの名前は、「オブジェクトが作成されたときに」決定されるものとしてカウントすることはできません-ここで「作成された」が私が考えているものとは異なることを意味しない限り。
- 実行時にのみタイプが決定されるオブジェクトの例は他にありますか?
- C++ が静的に型付けされた言語であると言うのは、どの程度正しいのでしょうか? というか、この点で C++ を分類する最も適切な方法は何ですか?
誰かが上記の点の少なくとも 1 つについて詳しく説明できれば素晴らしいことです。
編集:
標準は、new
式が実際に配列 objectを作成することを明確にしているようです。パラグラフ 5.3.4/5 による ( Xeo 提供):
割り当てられたオブジェクトが配列の場合(つまり、noptr-new-declarator構文が使用されるか、new-type-idまたは type-idが配列型を示す)、new-expression は最初の要素へのポインターを生成します ( any) の配列。[注: と の両方が type
new int
を持ち、 の型は--end note ] noptr-new-declarator のattribute - specifier-seqは、関連付けられた配列 type に属します。new int[10]
int*
new int[i][10]
int (*)[10]