Ruby

モジュールにinitializeメソッドを定義する時の注意

module Mod def initialize puts 'module initialized' end endclass Parent def initialize puts 'parent class initialized' end endclass Child include Mod def initialize super end endChild.new実行結果 module initializedinitializeメソッドを持つ…

rubygemsの動作がよく分からない

$ gem install mislav-will_paginate一般ユーザー権限で上のようにgem installを実行すると、~/.gem/ruby/1.8以下にmislav-will_paginateがインストールされる。 しかし以下のような警告が出る。 WARNING: Installing to ~/.gem since /usr/lib/ruby/gems/1.…

ruby-modeが起動しないエラー

Emacs21.4.1とruby1.8.7の環境でruby-mode.elを使うと以下のエラーが出た。 File mode specification error: (void-function run-mode-hooks)http://www.nabble.com/-ruby-dev:34853--emacs21%E3%81%A7ruby-mode.el-td17466768.html ここを参考にruby-mode.e…

ruby関連のドキュメント

Rubyのドキュメント 公式ドキュメント http://www.ruby-lang.org/ja/documentation/ RDoc http://www.ruby-doc.org/ gemでインストールした外部ライブラリAPI $ gem serverとしてhttp://localhost:8808/にアクセスする。 Railsのドキュメント railsもgemでイ…

クラスやモジュールは全て定数として保存される

トップレベルにクラスを定義する # 元々のObjectクラスにはOuterという名前の定数は存在しないが puts Object.const_defined?(:Outer) => false # Outerクラスを定義すると class Outer end # Outerという名前の定数ができる puts Object.const_defined?(:Ou…

アクセス制御メソッド

Javaでいうアクセス修飾子は、Rubyではメソッドとして提供される。 インスタンスメソッド用に、public、protected、private がある。 クラスメソッド用に、public_class_method、private_class_method がある。 デフォルトは、クラス内のメソッドであればpub…

オーバーライドとオーバーロード

オーバーライドが成立する条件はメソッド名の同値性だけ。 たとえば以下の例 class Animal def speak "hello" end endclass Dog def speak(word) "hello " + word end enddog = Dog.newputs dog.speak => 14:in 'speak': wrong number of arguments (0 for 1…

instance_of?メソッド

"aaa".instance_of? String => true "aaa".instance_of? Object => false String === "aaa" => true Object === "aaa" => true "aaa" === "aaa" => true String === String => false String === Object => false A.instance_of? B は、AがBの直接のインスタ…

equal?メソッドと==メソッド

hoge1 = "aaa" hoge2 = "aaa"puts hoge1 == hoge2 => true puts hoge1.equal? hoge2 => false rubyの==メソッドはJavaのequals()メソッドと同様に、値が同値であることの検証を行う。 rubyのequal?メソッドはJavaの==演算子と同様に、オブジェクトが同一であ…

superキーワード

Rubyのsuper class Parent def speak(word) word end endclass Child def speak(word) super end endchild = Child.newputs child.speak('hello') => hello スーパークラス(またはインクルードしたモジュール)のメソッドを呼び出す構文。両方に定義されて…

クラスとモジュール

リテラルとクラス 1.class => Fixnum 0.5.class => Float "hoge".class => String 'a'.class => String :hoge.class => Symbol ["hoge1", "hoge2"].class => Array {"var" => "value"}.class => Hash (1..5).class => Range ("abc".."xyz").class => Range /…

Ruby 1.8.7の導入

※ Ruby-1.9.1がまともに使えなかったのでRuby1.8.7に変更。1.9の安定版が出るまでは1.8で。 Rubyのインストール # wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz # tar xzvf ruby-1.8.7.tar.gz # cd ruby-1.8.7 # ./configure --prefix=/usr…

Ruby 1.9.1の導入

CheckInstallのインストール 最新のcheckinstall-1.6.1のrpmパッケージを取得する。 # wget http://asic-linux.com.mx/~izto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm rpmパッケージからインストールする。 # rpm -ivh checkinstall-1.6.1-1.i…