問題タブ [metaprogramming]

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.

0 投票する
16 に答える
551506 参照

python - オブジェクトのフィールドからの Python 辞書

任意のオブジェクトから辞書を作成する組み込み関数があるかどうか知っていますか? 私はこのようなことをしたいと思います:

注:メソッドを含めないでください。フィールドのみ。

0 投票する
4 に答える
2278 参照

ruby - 動的に生成されたクラスによるRuby例外の継承

私はRubyを初めて使用するため、この奇妙な例外の問題を理解するのに苦労しています。私はruby-aawsgemを使用してAmazonECSにアクセスしています:http://www.caliban.org/ruby/ruby-aws/。これにより、クラスAmazon :: AWS:Error:が定義されます。

これは、のようなエラーコードを取得した場合、AWS.InvalidParameterValue(例外変数で)Amazon::AWS::Error::InvalidParameterValueのサブクラスである新しいクラスを生成することを意味しますStandardError

今ここでそれは奇妙になります。私はこのように見えるいくつかのコードを持っています:

ここで、do_aws_stuffをスローするNameErrorと、レスキューブロックがトリガーされます。Amazon :: AWS :: Errorは、生成されたエラーのスーパークラスではないようです-モジュールなので、すべてがそのサブクラスだと思いますか?確かに私がそうするなら:

それはtrue、特にこれを考えると、私が混乱していると思うと言います:

何が起こっているのでしょうか。また、AWSエラーを他のタイプのエラーからどのように分離する必要がありますか?私は次のようなことをする必要があります:

それは非常にぎこちないようです。スローされるエラーもクラスAWSErrorではありません-次のように発生します:

したがって、私が探している例外rescueは、StandardErrorからのみ継承する生成された例外タイプです。

明確にするために、2つの質問があります。

  1. Rubyに組み込まれている例外であるNameErrorがkind_of?(Amazon::AWS::Error)モジュールであるのはなぜですか?
    回答:include Amazon::AWS::Errorファイルの先頭で、JavaインポートやC++インクルードのようなものだと思っていました。これが実際に行ったことは、Amazon::AWS::Error(現在および将来)で定義されたすべてのものを、すべてのクラスの祖先である暗黙のKernelクラスに追加することでした。これは、何でも合格することを意味しkind_of?(Amazon::AWS::Error)ます。

  2. Amazon::AWS::Error動的に作成された例外を他の場所からのランダムな他の例外と最もよく区別するにはどうすればよいですか?

0 投票する
3 に答える
6700 参照

ruby-on-rails - DRYの方法でActiveRecordの「検索」をオーバーライドする

カスタム検索条件を設定する必要があるモデルがいくつかあります。たとえば、Contactモデルがある場合、Contact.findが呼び出されるたびに、使用中のアカウントにのみ属する、返される連絡先を制限したいと思います。

私はこれをグーグルで見つけました(私は少しカスタマイズしました):

account_idがあいまいな場合を除いて、これはうまく機能するので、次のように調整しました。

これもうまくいきますが、DRYにしたいです。今、私はこの種の関数を使用したいいくつかの異なるモデルを持っています。これを行うための最良の方法は何ですか?

あなたが答えるとき、私たちの心がメタプログラミングRuby-fuを理解するのを助けるためにコードを含めてください。

(私はRails v2.1を使用しています)

0 投票する
5 に答える
2360 参照

xml - 手っ取り早い XML シリアライゼーション用の Ruby コード?

適度に複雑な XML 構造 (数十の要素、数百の属性) があり、XSD がなく、オブジェクト モデルを作成したい場合、ボイラープレートの from_xml() および to_xml() メソッドを作成しないようにするためのエレガントな方法は何ですか?

たとえば、次のようになります。

次のエンドレス シーケンスを記述しないようにするにはどうすればよいですか。

オブジェクト構造を明示的に作成しても構いません。高レベルのプログラミングで処理できると確信しているのはシリアライゼーションです...


クラスごとに1行または2行を節約しようとはしていません(from_xmlの動作を初期化子またはクラスメソッドなどに移動することにより)。私の精神的プロセスを複製する「メタ」ソリューションを探しています。

「すべての要素がクラス名になることはわかっています。すべての XML 属性はフィールド名になることもわかっています。割り当てるコードは @#{attribute_name} = el.[#{attribute_name} ] そして、サブ要素に再帰します。そして、to_xml を逆にします。"


「ビルダー」クラスと XmlSimple が正しい道のように思われるという提案に同意します。XML -> ハッシュ -> ? -> オブジェクト モデル (そして利益!)


更新 2008-09-18 AM: @Roman、@fatgeekuk、@ScottKoon からの優れた提案により、問題が解決したようです。HPricot のソースをダウンロードして、問題がどのように解決されたかを確認しました。重要なメソッドは明らかに instance_variable_set と class_eval です。irb の作業は非常に心強いものであり、現在実装に向けて動いています....非常に興奮しています

0 投票する
4 に答える
61363 参照

ruby - define_method にどのように引数を渡しますか?

define_method を使用して定義されているメソッドに引数を渡したいのですが、どうすればよいですか?

0 投票する
8 に答える
62297 参照

c++ - C++ テンプレート メタプログラミングの最適な入門書は?

静的メタプログラミング (別名「テンプレート メタプログラミング」) は、コンパイル時にプログラムを実行できる優れた C++ 手法です。この正規のメタプログラミングの例を読んだ瞬間、頭の中で電球が消えました。

C++ の静的メタプログラミングについてさらに学びたい場合、最良の情報源 (書籍、Web サイト、オンライン コースウェアなど) は何ですか?

0 投票する
11 に答える
13282 参照

java - Javaで静的メタプログラミングは可能ですか?

私はC++ での静的メタプログラミングのファンです。Javaにはジェネリックがあることを知っています。これは、静的なメタプログラミング (つまり、コンパイル時のプログラム実行) が Java で可能であることを意味しますか? もしそうなら、誰かがそれについてもっと学ぶことができる良いリソースを推薦できますか?

0 投票する
2 に答える
7568 参照

ruby - Ruby コードで「引数の数が間違っています (2 に対して 0)」という例外が発生するのはなぜですか?

「Test Driven Development: By Example」の Kent Beck の xUnit Python の例を書き直して、Ruby を磨き上げようとしています。私はかなり遠くまで行きましたが、実行すると次のエラーが表示されますが、理解できません。

私のコードは次のようになります。

誰かが私の明らかな間違いを指摘できますか?

0 投票する
15 に答える
3862 参照

haskell - 生成的プログラミングのための非C++言語?

C ++はおそらく静的メタプログラミングで最も人気のある言語であり、Javaはそれをサポートしていません

生成プログラミング(プログラムを作成するプログラム)をサポートするC ++以外の言語はありますか?

0 投票する
5 に答える
2056 参照

ruby - 複数の場所で同じ例外セットを再発生させる DRY 方法

短い:

RubyでこれをDRY化する方法はありますか:

より長いです:

私は通訳を構築しています。このインタープリターは、さまざまなエントリ ポイントを使用して呼び出すことができます。このインタープリターに「汚い」文字列をフィードすると、エラーが発生することが予想されます。ただし、do_something によって直接または間接的に呼び出されるすべてのメソッドのバック トレース全体によって、特にインタープリターが再帰を使用するため、スパムにならないようにするとよいでしょう。

上記のスニペットでわかるように、エラーを再発生させてバック トレースを削除する方法を既に知っています。私がしたいのは、上記の例の重複を削除することです。私がこれまでに最も近いのはこれです:

しかし、これにより re-raise-known-exceptions メソッドがバック トレースに表示されます。

編集:私が欲しいのは、Cの前処理マクロのようなものだと思います