問題タブ [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.
ruby - Ruby でメソッド名を動的に決定する方法
Rubyでは、「クラス」メソッドがオブジェクトの型を返す方法と同様に、メソッドの名前を決定する方法はありますか?
例えば:
perl - Perl アプリケーションが現在定義しているすべての変数を検出する最良の方法は何ですか?
私は次のようなことを行うための最良の、最も簡単な方法を探しています:
ruby - define_method を使用してクラス メソッドを作成するにはどうすればよいですか?
これは、クラス メソッドをメタプログラム的に作成しようとしている場合に役立ちます。
従うべき私の答え...
haskell - Template Haskellステートメントからの出力を簡単に確認するにはどうすればよいですか?
私のモジュールには、より大きなアプリケーションの一部である次のテンプレートHaskellコードがあります。
生成されたFoldableのインスタンスは、私が最初に考えていたものとは正確に一致していないと思われますが、これを確認する方法が見つかりません。したがって、できれば、のみを使用してghci
、生成されたインスタンスを表示することは可能ですか?
次のことを試しましたが、構文エラーが発生しました。これは、DoingItWrong™を使用しているためだと思います。
c++ - コンパイル時定数配列自体へのコンパイル時定数インデックスはコンパイル時定数ですか?
コンパイル時に C++ コンパイラが定数文字列のハッシュ値を合成する派手なゲームをプレイしようとしています。これにより、文字列を単一の識別子に置き換えることができ、コードのサイズと複雑さを大幅に節約できます。
プログラミングをわかりやすく簡単にするために、コンパイル時定数文字へのコンパイル時定数ポインターである "Hello" のような単純なインライン文字列を使用して、コンパイル時に調べて計算できれば最高です。
コンパイル時にこれらにインデックスを付けることができれば、テンプレート メタプログラムを作成して、自分のやりたいことを実行できます。しかし、C++ 標準が ct-constant 配列の ct-constant インデックスをそれ自体で ct-constant として扱うかどうかは不明です。
別の言い方をすると、
非常に有効な C++ (および C) です。しかし、値 va はコンパイル時定数ですか?
私はすでに答えはノーだと信じていますが、実際には一部のコンパイラは警告さえもせずにそれを受け入れ、エラーははるかに少なくなります。たとえば、次のコードは、Intel の C++ コンパイラからの警告が 1 つも表示されずにコンパイルおよび実行されます。
ただし、Microsoft のコンパイラはまったくコンパイルせず、内部リンケージを持つオブジェクトでテンプレートを使用することについて、合理的に一貫したエラー メッセージを表示します。
私の質問に対する答えは、「いいえ、定数インデックスを持つ定数配列への配列参照であっても、コンパイル時に定数であると想定することはできません」だと思います。これは、インテル コンパイラーの正常な実行がインテル コンパイラーのバグであることを意味しますか?
groovy - Groovy expando メタクラス
整数を拡張するいくつかのメソッドを持つクラスを開発しました。主にこれを行うことができます。
ここで、Integer.metaClass を次のように拡張する必要があります。
Money クラス宣言の前に、ファイルの一番下にそれを入れようとしましたが、コンパイラは Money という名前のクラスが既に存在すると言いました。このコードを実行するには void main を使用します)。
また、次のようにクラス内で静的ブロックを使用してみました。
これはどちらも機能しません。
3 番目の解決策は、ファイル名 (MoneyClass.groovy など) を変更し、クラス名 (class Money) を保持することですが、これは少し奇妙に思えます。
他にできることはありますか?ありがとう。
ruby - Ruby メタプログラミング オンライン チュートリアル
Ruby の学習を始めたばかりで、基礎がしっかりと理解できました。Ruby が得意とする優れた機能の 1 つはメタプログラミングだとよく耳にしますが、私が読んだチュートリアルのどれもこれをカバーしていません。Google で検索すると、有料の Ruby メタプログラミング スクリーン キャストしか見つからないようです。
では、優れた Ruby メタプログラミングのチュートリアルをオンラインでどこで見つけることができますか?
ruby - Ruby クラス定義の後でのみトリガーされる Class#inherited に似たフックはありますか?
#inherited
class Foo
ステートメントの直後に呼び出されます。end
クラス宣言を閉じるステートメントの後にのみ実行されるものが必要です。
必要なものを例示するコードを次に示します。
そのようなものは存在しますか?作成できますか?私は完全に運が悪いのでしょうか?