タグ

ブックマーク / blog.yugui.jp (2)

  • シンボルとは何か その1(後編) - 文字列のintern - 世界線航跡蔵

    シリーズ・RubyのSymbol 。だいぶ空いてしまったけど、気が向いたので続きを書く。 前回 は文字列の同一性について復習したのであった。 意義 そう言うわけで、文字列においては同一性と同値性は異なる。特に、Rubyの場合は同じリテラルも評価する度に異なるオブジェクトを生成する。ところが、これは不便な場合があるわけだ。 まず、文字列の同値性比較はコストがかかる。長い文字列を比較にするには時間が掛かる。保持しておくにも長い文字列だったらメモリーをう。更に、毎回リテラルからオブジェクトを生成するとしたら、無駄なケースが多々ある。Railsに良く出てくる疑似名前付き引数みたいなやつ。 some_method "a" => 1, "b" => 2, "c" => 3 おい、この箇所を通る度に一々文字列のメモリー確保してオブジェクト構築するのか? その背後ではパフォーマンス厨なら誰もが恐れる m

    シンボルとは何か その1(後編) - 文字列のintern - 世界線航跡蔵
  • Rubyのメタクラス階層 - 世界線航跡蔵

    この記事は、先日開催した 第3回 RHGの逆襲 のまとめみたいなものである。と、同時に『初めてのRuby(仮題)』の宣伝である。 クラス、その例外、そのトリック Rubyはクラスベースのオブジェクト指向だから、メソッドの情報はクラスに属している。インスタンスメソッドを呼び出すときには、そのオブジェクトの属するクラスを調べて、そのクラスの持っているインスタンスメソッドの中から探す。 でも、Rubyの場合は例外がある。1つはモジュール。モジュールはクラスではないのに、でもインスタンスメソッドを提供している。1つは特異メソッド。特異メソッドは特定のインスタンスに直接所属するメソッドだ。 でも、ここには実装上のトリックがある。Rubyにとってはモジュールのインスタンスメソッドも特異メソッドも、等しくクラスに属するインスタンスメソッドなんだな。 モジュール モジュールをクラスにincludeすると、

  • 1