S eda1a14b50ee24bcab19b62f40858e76 Ruby

ALGOLの皮をかぶったLisp

1.8はインタプリタ方式だったのが、1.9からJITコンパイル方式に変わった

Ruby 文法
Ruby 落とし穴

マニュアル

http://www.ruby-lang.org/ja/man/html/

バージョンの違いについて

なるほどわかりやすい。マイナーバージョンで安定性全然違うのが最近の言語の流行りなんだろか

6 :デフォルトの名無しさん:2009/12/05(土) 14:25:32
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中

http://pc12.2ch.net/test/read.cgi/tech/125...


1.8.7は違うらしい

俺も1.8.7は1.9.1すべきだと思ったよ。1.8.6→1.8.7で劇的に変わった感じ。1.8系は1.8.5あたりからpatchlevelが登場してごちゃごちゃしてきた印象。teenyが10未満という制限のための苦肉の策なんだけど…。

1.8.7→1.8.8は1.8.6→1.8.7ほど変わらない予感がするから1.9.2あたりが理想だろうか。「1.10」はそのままバージョン文字列比較できなくなるからまずい。

そうなると現在の1.9.1は2.0.1、まだ見ぬ2.0は3.0とか4.0でいいんじゃないか。なぜ2.0にこだわるのか俺にもよくわからない。

http://d.hatena.ne.jp/rubikitch/20090213/1...


インストール

Windowsのインストーラ

http://rubyinstaller.rubyforge.org/wiki/wi...
gemとかも入る


PHP -> Ruby

Rails for PHP Developers
http://railsforphp.com/reference

http://www.marusankakusikaku.jp/archives/2...

http://arika.org/doc/php-ruby

http://rsthree.com/2006/12/02/ruby-for-php...

http://aligach.net/diary/20050829.html


その他

スクレイピングライブラリ

gem install hpricot

http://mono.kmc.gr.jp/~yhara/rubyscraping/...

arrayかどうかチェックする

 obj.instance_of?(Array)
 obj.class == "Array"

レイジーロード

validation.rbにこんなのがあった
    # Returns the Errors object that holds all information about attribute error messages.
    def errors
      @errors ||= Errors.new(self)
    end
これはもしや、レイジーロードパターン?

irb(main):029:0> class Moge
irb(main):030:1>   @@moge = nil
irb(main):031:1>   def self.get
irb(main):032:2>     @@moge ||= Moge.new
irb(main):033:2>   end
irb(main):034:1> end
=> nil
irb(main):035:0> Moge.get()
=> #
irb(main):036:0> Moge.get()
=> #
なるほど、いいね。


文字コード変換

require 'kconv'

str.toeuc
str.tosjis
str.toutf8

http://jp.rubyist.net/magazine/?0009-Bundl...


PHPのcall_user_func

Object.method(:method_name).call(args)

http://www.ruby-lang.org/ja/man/html/Metho...

ファイルに書き込む

File.open(filename, 'w'){|f|
  f.puts hogehoge
}

http://www.namaraii.com/rubytips/?%A5%D5%A...#l9

PHPのdate('YmdHis")

Time.new.strftime("%Y%m%d%H%M%S")

置換

rubyは改行コード問わず、\nらしい
str.gsub(/\n+/, "\n")

マッチして配列

ary = str.scan(/ /)

文字コード指定して実行

Shift_JIS: ruby -Ks

型チェック

obj.kind_of?(type)

inject

合計を求める
[0..10].inject(0){|sum, v|
  sum += v
}

Array(find_all) To Hash

これでいいんだろうか。Hashは基本的にシンボルで格納すべきなんだろうか。

    hash = self.find(:all).inject({}){ |result, item|
      result[item.id] = item.name
      result # return
    }

Test::Unit

http://www.ruby-lang.org/ja/man/html/Test_...

assert_equalsではなく、assert_equal

privateメソッドのテスト

sendメソッドを使えばprivateメソッド呼べるらしい。便利だけどいいのか。
http://d.hatena.ne.jp/LukeSilvia/20080518/p1
→でもRuby1.9からはアクセス制限ちゃんとかかるとのこと。instance_evalを使う。

これでいいか?
def test_hoge
  obj.instance_eval{
    private_method
  }
end

その他メモ

・ブロックを抜けるのはreturnではなくてnext。returnだとメソッド終了してしまう
http://www.okisoft.co.jp/esc/ruby/tut-06.html
・可変長引数はdef hoge(*arg)


頻出クラス

Hash
http://www.ruby-lang.org/ja/man/html/Hash....
Enumerable
http://www.ruby-lang.org/ja/man/html/Enume...
Array
http://www.ruby-lang.org/ja/man/html/Array...

もしかして

    他の人の「Ruby」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート