タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

メタプログラミングに関するareyoukicking2のブックマーク (4)

  • メタプログラミングを使ってRubyにプロパティを追加する

    class CruiseShip property :direction property :speed end このコードを構文解析してロードしてみた。だが、まだこんなエラーが残っている。NoMethodError: undefined method 'property' for CruiseShip:Class これを解決するには、簡単な事実に気づけばよい。Rubyのクラスを定義した場合、それは単に宣言しているというだけではなく、クラスがロードされる時に実際に実行しているということなのだ。以下の行がロードされた時に、 property :direction "property"という関数を探して、":direction"というパラメータとともに呼び出している。この時、"property"メソッドを使えるようにするには、どうすればよいだろうか?そこで、こうしてみよう。 def prope

    メタプログラミングを使ってRubyにプロパティを追加する
  • None is None is None: メタプログラミングパターン (1) 特異メソッド

    2009年7月21日 メタプログラミングパターン (1) 特異メソッド 『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。 目次 Ruby向けデザインパターンその2。 メタプログラミングは動的言語の専売特許ではありません。 静的なC++では、テンプレートやマクロを使ってメタプログラミングをします。 それはつまり、メタプログラミング用に実行時とは別の言語を用意するということです。 (「使える言語」にC++(runtime)とC++(compile time)の2種類を書くというジョーク?があります。) しかし、動的言語のPythonならばより自然に柔軟な記述が可能です。 コンパイル時と実行時の区別が無く、クラスやオブジェクトを、リストや辞書並みに、バリバリ変更できるので、メタプログラミング用にPython自身を使え

  • Pythonのメタプログラミング (メタクラス) を理解したい人のための短いコード片と禅問答 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー Pythonのメタプログラミング手法の一つ「メタクラス」は,初心者にとっては「なんか強そう/経験値たくさんもらえそう」なアイテムの最右翼だと思う。反面「どうすればいいか/なにができるか」ということがなかなか理解しづらい。 英語のブログを見ていたら,メタクラスの理解に役立ちそうなちょうどよいサンプルを見つけたので,紹介がてら独自の解説を付け加えたいと思います。 メタクラスを簡単に説明すると,「来コードを書かなければ実現できないような処理を黒魔術的な処理でなんとかしちゃう」ためのテクニックです。コード量を(時には劇的に)減らすことができたり,すっきりした見通しの良いクラス設計を実現できま

  • Rubyの実用的かもしれないメタプログラミングのテクニック - このブログは証明できない。

    4歳の長女とオセロで遊ぶようになりました。挟んでひっくり返すのはできるのですが、ナナメに挟むというのが難しいようです。そこ、ナナメもひっくり返せるよ。と思うのですが、長女は気づきません。私もあえて口に出さず、常に圧勝しています。白黒はっきりしないグレーなオセロを楽しんでいます。 さて、Rubyの特徴のひとつに、メタプログラミングがやりやすいことが挙げられます。あ、オセロの話は一切関係ないので、忘れてください。 Rubyのリフレクション解説(eval族のはなし) - このブログは証明できない。 メタプログラミングをすると、肩こりや便秘の解消などいろいろな効果がありますね。今回は、そのうちのひとつを紹介したいと思います。思い浮かべてください。既存のライブラリのある処理だけ差し替えたい。下の例では、targetメソッドの中で使われているFixnum#to_sメソッドを差し替えたいのです。そう、差

  • 1