問題タブ [qualified-name]
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.
r - ::経由でパッケージ内の関数を呼び出すことは良い習慣ですか
stringr
やのような他のパッケージでいくつかの便利な関数を使用するいくつかの R 関数を書いていますbase64enc
。これらのパッケージを最初にロードするためにlibrary(...)
or )を呼び出すのではなく、必要な関数を直接参照するために使用するのは良いことですか?require(...
::
stringr::str_match(...)
一般的な場合、それは良い習慣ですか?または、どのような問題を引き起こす可能性がありますか?
java - javaシリアライゼーションフレームワークで構文的に不正なQNameの作成が許可されているのはなぜですか?
コードがさまざまな場所で無効な修飾名を作成しているという事実によって引き起こされる、多くの JAXB シリアライゼーション エラーに遭遇しました。私が使用している API やその他の Java XML オプションを調査していますが、奇妙なことの 1 つは、修飾名を実装するクラスが入力チェックをまったく実行していないように見えることです。
複雑なコードはさまざまな JAXB オブジェクトを生成するため、これは非常に問題があり、何かがひどく間違っていることに気付くのはマーシャリングの時までではありません。例外スタックは通常、どの要素/属性が間違っているかを教えてくれません。何かが間違っているだけです。
これらのライブラリが、シリアライズ不可能なコンテンツを最初から作成することをより困難にすることは、より理にかなっているのではないでしょうか?
コード スニペットを次に示します。なぜこれが機能するのでしょうか。スローすべきではありませんIllegalArgumentException
か?QName を定義する他の API でも、動作は同じです。このクラスの javadoc は、名前空間が null の場合は を取得するIllegalArgumentException
が、それ以外の場合は取得しないことを指定しています。
参考文献: QNameに関連する javadoc、name が anyURI であり、 localpart が NCName であることを示す仕様制約。つまり、仕様によれば、シリアル化に関係なく、上記のコードは明らかに無効です。
c++ - nested-name-specifier の名前検索規則
以下を読みました (3.4.3/1):
nested-name-specifier の :: スコープ解決演算子の前に decltype-specifier がない場合、:: の前にある名前の検索では 、特殊化が型である名前空間、型、およびテンプレートのみが考慮されます。
ネストされた名前指定子の検索規則は何ですか?
例えば:
2 番目の例:
2 番目の例で A::B が名前空間内で修飾名として表示されるというのは本当ですか? つまり、ネストされた名前指定子のルックアップのルールを帰納的に定義できます。しかし、私は標準でそのようなものを見つけることができません。それはまったく本当ですか?
c++ - 修飾された declarator-id の後に続く名前ルックアップ
次の引用の意味を理解しようとしています (3.4.3/3 N3797):
修飾 ID に続く名前は、メンバーのクラスまたは名前空間のスコープで検索されます。
のスコープは、の宣言ポイントが続く宣言領域のみstatic int b;
で構成されます。実際:b
クラスで宣言された名前の潜在的なスコープは、名前の宣言ポイントに続く宣言領域だけでなく、すべての関数本体、デフォルト引数、例外仕様、および 非静的のブレースまたはイコール初期化子からも構成されます。そのクラスのデータ メンバー
これstatic const int a=7;
は、 が のスコープに属していないことを意味しstatic int b;
ます。したがって、static const int a=7
は では見つかりませんint A::C::b=a;
。
それは標準のタイプミスですか、それとも私の誤解ですか?
c++ - 標準の 3.4/2 がわかりません
標準の 3.4/2 がわかりません:
「式のコンテキストで検索された」名前は、その式が見つかったスコープで非修飾名として検索されます。
以下のように名前が修飾されている場合はどうなりN::i
ますか?
修飾名N::i
は、 が見つかったスコープでN::i
は検索されません。つまり、main() のスコープとグローバル スコープでは検索されません。
c++ - Qualified-ids、それらは左辺値ですか、それとも前値ですか?
私は、C++11 標準の §5.1.1/8 (87 ページ) の段落で、このステートメント (私の強調) を検証しようとしていました。
オプションでキーワード テンプレート (14.2) が続き、その後にそのクラス (9.2) またはその基本クラスのいずれかのメンバーの名前 (条項 10) が続く、クラスを示すネストされた名前指定子は、修飾 ID; 3.4.3.1 は、qualified-ids に現れるクラス メンバーの名前検索について説明しています。その結果がメンバーです。結果の型はメンバーの型です。結果は、メンバーが静的メンバー関数またはデータ メンバーの場合は左辺値、それ以外の場合は prvalueです。
次のスニペットを使用します。
clang
このコードをgcc
コンパイルしVS2013
、メンバー関数の定義が必要f
です。
3つともプリント
しかし、これらの数字がどこから来たのかわかりません。
上で強調表示されている段落によると、式N::A::f
は prvalue でf
あり、静的メンバー関数ではありません。それにもかかわらず、コードでそのアドレスを取得することができました。
同時に、§5.3.1/3 には次のように書かれています (強調は私のものです):
単項 & 演算子の結果は、そのオペランドへのポインターです。オペランドは、左辺値または修飾 IDでなければなりません。オペランドが、型 T を持つクラス C の非静的メンバー m を指定する 修飾 IDである場合、結果の型は「型 T のクラス C のメンバーへのポインター」であり、C::m を指定する prvalue です。
これは、 qualified-idであるため、左辺値でもN::A::f
そうでもないという印象を与えます。N::A::i