タグ

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

  • GitHub - robb/Underscore.m: A DSL for Data Manipulation

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - robb/Underscore.m: A DSL for Data Manipulation
    monjudoh
    monjudoh 2012/05/17
    これは凄い。_array(tweets).filter(Underscore.isDictionary)とかどうやってるのかと思ったら型がblockのpropertyをreadしてcallしてるのか。blockのcallは関数スタイルだから、JS等のメソッド呼び出しと同じ構文を装えるのか。
  • オブジェクトが持つプロパティの型と名前のリストを取得する - その後のその後

    クラス/オブジェクトが持つプロパティ情報を取得するには、Objective-C のランタイムにある、 objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount); を使用します。 また objc_property_t 型のプロパティ情報からプロパティ名を取得するには、同じくobjcランタイム内の const char *property_getName(objc_property_t property); を使用します。 プロパティ名一覧を返すメソッドの実装例 まずランタイムのヘッダをインポート。 #import "objc/runtime.h" こんな感じでプロパティ名一覧を返すメソッドを実装できます。 - (NSArray *)propertyNames { unsigned int outCou

    オブジェクトが持つプロパティの型と名前のリストを取得する - その後のその後
  • Blocksで既存メソッドを置き換える

    Objective-Cのリテラル強化きた。 NSArray *array = [NSArray arrayWithObjects: @0, @23, @3.1415, @YES, nil]; int値、float値や BOOL値 に @ を付けると NSNumberに変更され...

  • Rubyの魔術 数々の“スペル”で高度なプログラミング − @IT

    2010/09/13 元JavaプログラマのPaolo Perrotta氏は、Rubyを使い始めた頃のことを振り返り、こう話す。 「私はJavaの世界からRubyに来た当初、とてもハッピーなプログラマでした。Rubyっていいね、かっこいいじゃん! と。ところが、最先端のイケてるライブラリの中を覗いてみたら、分からないところだらけだったんです……」。 RubyKaigi2010で「A Metaprogramming Spell Book」(あるメタプログラミング魔術の書)と題した講演を行ったイタリア人プログラマのPerrotta氏は、Ruby on Railsのソースコードを覗いてみたときの驚きをこう表現する。 「例えばalias_method_chainというメソッドは、一体どこにあるんだと探しました。どこにあるか分からないんです。こんなことJavaではあり得ません。結局、テキスト検索で発

    monjudoh
    monjudoh 2010/09/14
    『Rubyは君を信頼する。~ただし、大いなる力には、大いなる責任が伴うことを忘れてはいけない』『メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ。去るがいい。静かに瞑想させて』
  • メタプログラミングRuby(Paolo Perrotta/角征典) - ただのにっき(2010-09-13)

    ■ メタプログラミングRuby(Paolo Perrotta) 翻訳者の角正典(aka kdmsnr)さんから献いただいた。なんでも刊行と同時にtDiaryの主要開発者に配られたようで、ありがたいことです。これは(たぶん)tDiaryが彼がこの世界に飛び込んだきっかけのひとつになったことへの感謝の意なんだろうとは思うが、裏の理由はtDiaryもまともなメタプログラミングをしろやというメッセージだろう。まったくだ! tDiaryは約10年前、書でいうところの「Javaのような」コードから出発していながら、随所でevalしまくるという、なんというか「ちょうどいい中間の状態」がないものだから、拡張しづらいはデバッグが難しいわで、なかなか厄介なレガシーコードになっている。そんなソフトウェアのメンテナが書を読むと、メタプログラミングを使ってコードを全面的に書き換えたくなることと間違いなしである

    monjudoh
    monjudoh 2010/09/14
    『Rubyの文法がひととおり身についたら、次に手にとるべきなのは本書かも知れない。いや、大げさじゃなく。』
  • メタプログラミングの基本とか - mirichiの日記

    Rubyはメタプログラミングができる言語だ。 高度なことをしようと思うと特異クラスなどの詳細を知る必要が出てくるが、そういうことをそれなりに知っている人でなければ、特異メソッドぐらいは理解できても特異クラスが出てきた時点でよくわからなくなってしまう。 よくある説明とは違う切り口で説明してみよう。 ちょっと長いが気にしない。 1. まず、Rubyでは先頭が大文字の識別子は定数である。 このルールで最もよく使われるのはクラスやモジュールの名前だろう。 これらは定数である。 class Hoge end p Object.const_get("Hoge").name # => "Hoge" p Object.const_get("Hoge").class # => Class Hogeという定数が定義され、そこにHogeクラスを表すClassオブジェクトが入っているわけだ。 つまり上記の定義は(

    メタプログラミングの基本とか - mirichiの日記
  • もんだいの解答 - まめめも

    もんだいの解答。 いくつかの解答が挙げられていますが、問題文には仕様も前提もろくに書かれていないので、インチキもまとももなくみんな正解です。僕が想定していた解答はこんな感じ。 def div(x, y) puts [111111111, true, 12345678987654321] exit end 嘘です。 基的な方針は i のメソッドの上書きです。つまり例えば、i.inspect の結果が i の実際の値と関係なく 111111111 を返せばいいわけです。Bignum#inspect ごと上書きしてしまうのも手ですが、他の Bignum にも影響が及ぶのであまり気分がよくないです。こういうときはやっぱり i の特異メソッドとして上書きしたいですよね。まずは p(i) #=> 111111111 だけ目指すとして、考えられるのは次のようなコードです。 def div(x, y)

    もんだいの解答 - まめめも
  • 1