Hatena::Grouprubyist

Rubyを勉強しようと思ってはじめた日記

2008-03-31Rubyでアクセス解析をする(0.1)

Rubyでアクセス解析をする(0.1)正規表現

| 14:04 | Rubyでアクセス解析をする(0.1)正規表現 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Rubyでアクセス解析をする(0.1)正規表現 - Rubyを勉強しようと思ってはじめた日記 Rubyでアクセス解析をする(0.1)正規表現 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Apacheのアクセスログをスペース区切りで読んでみた...これだとUAのスペースや、日付にあるスペースでも分割されてしまう。これじゃだめなので...正規表現で考えてみよう。

アクセスログと正規表現

2008-03-29

Rubyでアクセス解析をする(0)

| 00:00 | Rubyでアクセス解析をする(0) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Rubyでアクセス解析をする(0) - Rubyを勉強しようと思ってはじめた日記 Rubyでアクセス解析をする(0) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Rubyを使ってアクセス解析をしてみようと思います。本に実例が載っていたんですが、それを参考に作ってみようと思います。

課題

  • 時間ごとのアクセス数が知りたい
  • 1日毎の人気ページを知りたい
  • 1日毎の人気参照元が知りたい
  • IE7はどれぐらいアクセスあるのか知りたい

とりあえず、RSSを取得(6)時間ごとに並び替え

| 22:07 | とりあえず、RSSを取得(6)時間ごとに並び替え - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - とりあえず、RSSを取得(6)時間ごとに並び替え - Rubyを勉強しようと思ってはじめた日記 とりあえず、RSSを取得(6)時間ごとに並び替え - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

RSSを取得。取得したフィードを時間ごとに並び替えたい、と思っていました。

取得したfeedを用意。feedクラスは、FeedItemクラスを持っていると。

feedをまとめたfeedsクラスでitemをあれこれすると。

って作ってみたんですが、まとめフィードを書き出すとかの時に使えるかな?と。

作ってみた感想

ひとまずクラスを用意するところから始まるので、その時点である程度の設計が出来る感じがします。

あと、なんとなく見通しの良いコードになる気がします(ここらへんは好き好きなんだろうなあと)。

細かい点では、色々と気になる点があるんですが、それは今後(デバッグがイマイチわからない...)。


feed.rb

class Feed

    attr_accessor :title, :link, :description, :items

    def initialize
        @titile      = nil 
        @link        = nil 
        @description = nil 
        @items       = Array.new
    end 
end

feedItems.rb

class FeedItem

    attr_accessor :title, :link, :description, :date, :creator

    def initialize
        @title = @link = @description = @date = @creator = nil 
    end 
end

feeds.rb

class Feeds
    attr_accessor :feed, :items

    def initialize
        @feed  = Array.new
        @items = Array.new
    end

    def add(feed)
        @feed  << feed
        feed.items.each{|item|
            @items << item
        }
    end

    def each_items
        @feed.each{|feed|
            feed.items.each{|item|
                yield(item)
            }
        }
    end

    def sort_by_time 
    @items.sort!{|a,b|
        b.date <=> a.date
    }    
    end
end

index.cgi

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'rss/1.0'
require 'rss/dublincore'
require 'open-uri'

require 'feeds'
require 'feed'
require 'feedItem'

print "<h1>TEST RSS</h1>"

urls = Array.new
urls.push('http://d.hatena.ne.jp/naoya/rss')
urls.push('http://d.hatena.ne.jp/jkondo/rss')
urls.push('http://d.hatena.ne.jp/tikeda/rss')

feeds = Feeds.new

urls.each{|url|
    getFeed = open(url){|doc|
        RSS::Parser.parse(doc.read)
    }

    feed             = Feed.new
    feed.title       = getFeed.channel.title
    feed.link        = getFeed.channel.link
    feed.description = getFeed.channel.description

    getFeed.items.each{|gItem|
        feedItem             = FeedItem.new
        feedItem.link        = gItem.link
        feedItem.title       = gItem.title
        feedItem.description = gItem.description
        feedItem.date        = gItem.dc_date
        feed.items << feedItem
    }
    feeds.add(feed)
    #feeds.feed << feed
}

#----------

    feeds.each_items{|item|
        print item.title + '<br>'
    }
    
    print '<hr>'
    
    feeds.sort_by_time
    feeds.items.each{|item|
        print item.title,item.date,'<br>'
    }
    
    print '<hr>'
    
    feeds.feed.each{|feed|
        print '<a href="' + feed.link + '">' + feed.title + '</a><br>'
    
        feed.items.sort!{|a,b|
            a.date <=> b.date
        }

        feed.items.each{|fitem|
            print fitem.title, '<br>'
        }

    }

NicolNicol2012/10/16 03:35This does look promsinig. I'll keep coming back for more.

NicolNicol2012/10/16 03:36This does look promsinig. I'll keep coming back for more.

ixlczbmfziixlczbmfzi2012/10/16 21:21JpahRp <a href="http://hfxpemttknii.com/">hfxpemttknii</a>

yaomuqnrjyaomuqnrj2012/10/19 13:37n5udKu , [url=http://ufafovgtjwvg.com/]ufafovgtjwvg[/url], [link=http://idvbtwegqgrc.com/]idvbtwegqgrc[/link], http://wqbpwwahjsnv.com/

fsmbxomuofsmbxomuo2012/10/20 01:102z44LR <a href="http://eaxvekllnrjm.com/">eaxvekllnrjm</a>

ooipbamooipbam2012/10/20 11:20iKq5o2 , [url=http://nnolmwurndej.com/]nnolmwurndej[/url], [link=http://pzyvkvbounxd.com/]pzyvkvbounxd[/link], http://xlmtjajpbhvg.com/

2008-03-26

とりあえず、RSSを取得(5)小休止

| 06:09 | とりあえず、RSSを取得(5)小休止 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - とりあえず、RSSを取得(5)小休止 - Rubyを勉強しようと思ってはじめた日記 とりあえず、RSSを取得(5)小休止 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

多重代入

これは多重代入というらしい。

@title = @link = @description = @date = @creator = nil

2008-03-25

Rubyのバージョンアップの方法を調べる

| 17:42 | Rubyのバージョンアップの方法を調べる - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Rubyのバージョンアップの方法を調べる - Rubyを勉強しようと思ってはじめた日記 Rubyのバージョンアップの方法を調べる - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Rubyのバージョンアップの方法を調べておく

2008-03-24

とりあえず、RSSを取得(4)

| 00:10 | とりあえず、RSSを取得(4) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - とりあえず、RSSを取得(4) - Rubyを勉強しようと思ってはじめた日記 とりあえず、RSSを取得(4) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

RSSを取得して表示することはできました。やってみて気づいたこと。日付については、timeオブジェクトになっているみたい。「みたい」というのは、どうやったら、何のオブジェクトなのかわからないから。これがきちんとわかれば色々と便利そう。ありそうなんだけれどなあ。

これか?

自分で書いてた?

結論

.classを使えばわかった!きちんと、Timeオブジェクトだということがわかった。

2008-03-22

とりあえず、RSSを取得(3)複数のフィードを取得してみたら

| 00:37 | とりあえず、RSSを取得(3)複数のフィードを取得してみたら - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - とりあえず、RSSを取得(3)複数のフィードを取得してみたら - Rubyを勉強しようと思ってはじめた日記 とりあえず、RSSを取得(3)複数のフィードを取得してみたら - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

複数のフィードを取得してみたら、全部のフィードのなかで、時間通りに並べてみたくなりました。

そこで、ParseDateを使えばいいのかな?

rss/dublincoreがないと、時間は取得できませんでした。

参考

スクリプト

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
#require 'pp'
require 'rss/1.0'
require 'rss/dublincore'
require 'open-uri'

require 'parsedate'
include ParseDate

require 'feed'
require 'feedItem'


class Feeds
    attr_accessor :feed

    def initialize
        @feed = Array.new
    end
end

print "<h1>TEST RSS</h1>"

urls = Array.new
urls.push('http://d.hatena.ne.jp/naoya/rss')
urls.push('http://d.hatena.ne.jp/jkondo/rss')
urls.push('http://d.hatena.ne.jp/tikeda/rss')

feeds = Feeds.new

urls.each{|url|
    print url + "<br />"
    getFeed = open(url){|doc|
        RSS::Parser.parse(doc.read)
    }

    feed             = Feed.new
    feed.title       = getFeed.channel.title
    feed.link        = getFeed.channel.link
    feed.description = getFeed.channel.description

    getFeed.items.each{|gItem|
        feedItem             = FeedItem.new
        feedItem.link        = gItem.link
        feedItem.title       = gItem.title
        feedItem.description = gItem.description
        feedItem.date        = gItem.dc_date
        feed.items << feedItem
    }

    feeds.feed << feed
}


#----------

feeds.feed.each{|feed|
    print '<a href="' + feed.link + '">' + feed.title + '</a><br>'
    feed.items.each{|fitem|
        print fitem.title + '<br>'
        print fitem.link  + '<br>'
print fitem.date, '<br>'
    }
}

2008-03-21 とりあえず、RSSを取得(2)

とりあえず、RSSを取得(2)取得して表示してみた

| 00:14 |   とりあえず、RSSを取得(2)取得して表示してみた - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -   とりあえず、RSSを取得(2)取得して表示してみた - Rubyを勉強しようと思ってはじめた日記   とりあえず、RSSを取得(2)取得して表示してみた - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

RSSを取得して表示するスクリプトを一通り書いてみました。その中で気になったことをまとめ。

デバッグ

タイプミスなのか、書き方が悪いのか判別するために時間がかかりました。オブジェクトが持つ値や、メソッドなどを知る手立てを用意しないといけないですね。

記述方法

下記みたいに書けるのを知りました

@title = @link = @description = @date = @creator = nil
feed.items << feedItem

他にもあるんだろうなあ、いろいろな書き方。配列に関する記述って色々ありそう...。

便利

attr_accessorは便利!標準でこうしたのがあるのは便利!

気づき

クラス変数?メンバ変数?に配列(Array.new)をセットすると、.eachだとかイテレータが使える。なんだか、感動。便利すぎる。

スクリプト

id:adamrockeさんとほぼ同じ...。

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'rss/1.0'
require 'open-uri'

class Feed

    attr_accessor :title, :link, :description, :items

    def initialize
        @titile      = nil
        @link        = nil
        @description = nil 
        @items       = Array.new
    end
end

class FeedItem

    attr_accessor :title, :link, :description, :date, :creator

    def initialize
        @title = @link = @description = @date = @creator = nil
    end
end

url = 'http://b.hatena.ne.jp/naoya/favorite?mode=rss';

getFeed = open(url){|doc|
    RSS::Parser.parse(doc.read)
}

#getFeed.output_encoding = "UTF-8"

feed             = Feed.new
feed.title       = getFeed.channel.title
feed.link        = getFeed.channel.link
feed.description = getFeed.channel.description

getFeed.items.each{|gItem|
    feedItem      = FeedItem.new
    feedItem.link = gItem.link
    feedItem.title= gItem.title
    feedItem.description = gItem.description

    feed.items << feedItem
}

print "<h1>" + feed.title + "</h1>"
print "<hr />"
print feed.link
#print feed.description

print "<hr />"

feed.items.each{|item|
    print '<a href="' + item.link + '">'
    print item.title
    print '</a><br />'
}

2008-03-17とりあえず、RSSを取得

とりあえず、RSSを取得(1)

| 02:05 |  とりあえず、RSSを取得(1) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  とりあえず、RSSを取得(1) - Rubyを勉強しようと思ってはじめた日記  とりあえず、RSSを取得(1) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

とりあえず、RSSを取得してみました。

open-uriは便利だ、と。そいうことじゃなくて、取得したRSSを分解して使ってみたいぞ、という話。

CGI形式にしているのは、ただ単に確認しやすいだけです。意味なし。

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'open-uri'

url = 'http://b.hatena.ne.jp/naoya/favorite?mode=rss';

open(url){|doc|
    doc.each_line{|line|
        print line
    }   
}

ここを読む

他の人が書いたRubyのコードを参考にしてみる

2008-03-15gem

Rubyを使ったプログラムの作法は?

| 00:08 |  Rubyを使ったプログラムの作法は? - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Rubyを使ったプログラムの作法は? - Rubyを勉強しようと思ってはじめた日記  Rubyを使ったプログラムの作法は? - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

作法がわからず調べるのも大変だったりするので、一通りまとめてみた。

Rubyの標準ライブラリについて

Rubyの標準ライブラリについては、

こちらを見て知ることが出来る。なるほど、なるほど。

メソッドの調べ方?

まつもとさんが書いていた

Rubyのヘルプ

ありがたい

やりたいことから調べる場合

こいうのは、PHPとか、Perlでみたことがないかも。

each_lineって?

| 18:37 |  each_lineって? - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  each_lineって? - Rubyを勉強しようと思ってはじめた日記  each_lineって? - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

きちんと調べよう

open(url){|f|
    f.each_line {|line| p line}
}

ライブラリを探す

| 18:02 |  ライブラリを探す - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  ライブラリを探す - Rubyを勉強しようと思ってはじめた日記  ライブラリを探す - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

PerlとRubyでのロードできるライブラリを確認する方法 - Bouldering & Com.をそのまま。

find `ruby -e 'print $LOAD_PATH.join(" ")'` -type f -name "*.rb"

$LOAD_PATHという変数に入っているらしい

gemをアップデート

| 17:43 |  gemをアップデート - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  gemをアップデート - Rubyを勉強しようと思ってはじめた日記  gemをアップデート - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

VMware Playerにインストールしていたgemをアップデート。0.9.3だったのが、1.0.1になりました。

結構アップデートされているんですね。

gem update --system

gemでパッケージの検索

# gem search --remote rss

*** REMOTE GEMS ***

Bulk updating Gem source index for: http://gems.rubyforge.org
georss4rb (0.1.1, 0.0.2, 0.0.1)
rss-client (2.0.9)
simple-rss (1.1, 1.0.0)
svn2rss (0.1.0)

2008-03-14WindowsにRubyGemsをインストールする(2)

Rubyを勉強すると意外とPrototype.jsが理解しやすくなる

| 11:03 |  Rubyを勉強すると意外とPrototype.jsが理解しやすくなる - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Rubyを勉強すると意外とPrototype.jsが理解しやすくなる - Rubyを勉強しようと思ってはじめた日記  Rubyを勉強すると意外とPrototype.jsが理解しやすくなる - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

そんな気がする雨の日です。

WindowsにRubyGemsをインストールする(2)

| 11:02 |  WindowsにRubyGemsをインストールする(2) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  WindowsにRubyGemsをインストールする(2) - Rubyを勉強しようと思ってはじめた日記  WindowsにRubyGemsをインストールする(2) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

確かに動くけれど、いろいろなところでエラーが出てしまう...。

調整するかあ、と考えたらVMware を起動する方が早いような気もしてきました。

MacOS Xだったらいいのか!

2008-03-13WindowsにRubyGemsをインストール

WindowsにRubyGemsをインストールする

| 08:21 |  WindowsにRubyGemsをインストールする - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  WindowsにRubyGemsをインストールする - Rubyを勉強しようと思ってはじめた日記  WindowsにRubyGemsをインストールする - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

ふだんは、VMware PlayerにFedoraCoreを入れて利用しています。そのほうが何かと便利なので。巷にあるドキュメントも、Linux向けのが多いですからね。でも、起動に時間がかかる。あと、やっぱりちょっと動作が重い感じがします。細切れの時間でも、Rubyのことを知るために、WindowsRubyを入れました。ついでに、PowerShellも入れました。これで、lsとかコマンドも通じるようになります。

WindowsRubyを入れる

  • ファイルをダウンロード(公式サイトから辿れます)
  • ダウンロードしたファイルを展開
  • 展開したファイルを適当なところに置きます(D:\usr\local\rubyに置いた)
  • 環境変数として、D:\usr\local\rubyを追加します
  • コマンドプロンプト(cmd.exe)で、ruby -vと入力すると、Rubyのバージョンが返ってきたら問題なし

WindowsRubyGemsをインストール

  • http://rubyforge.org/frs/?group_id=126 から、REL_0_9_5などのところにある.zipファイルをダウンロード
  • ダウンロードしたファイルを展開し、適当なところにおきます(D:\usr\local\rubygemsに置いた)
  • setup.rbを実行します( D:\usr\local\rubygems> ruby setup.rb )
  • 色々と怒られる(流れてしまうので割愛)
  • インストールが始まる
  • 終わったみたいなときに、gemと入力すると、ヘルプが表示される
  • 完了?

muscovyduckmuscovyduck2008/03/19 05:09Windowsなら、最初からRubyGemsが付属しているOne-Click Ruby Installerを使うのが楽ですよ。
http://rubyforge.org/projects/rubyinstaller/
以前インストール方法をまとめてみました。
http://rubyist.g.hatena.ne.jp/muscovyduck/20070325/p1
上記の例ではruby186-26.exeですが、現時点の最新版はruby186-26.exeのようです。

d4-1977d4-19772008/03/20 19:00ありがとうございます。Windowsには、「One-Click Ruby Installer」というのがあるのですね。知らなかったです。一度、Windowsに入っているRubyは消してから試してみようと思います

2008-03-10RubyGemsって?

RubyGemsって?

| 13:39 |  RubyGemsって? - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  RubyGemsって? - Rubyを勉強しようと思ってはじめた日記  RubyGemsって? - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

下記を参考にして、調べてみようと思います。

見てみると....

見てみると、RMagickとか、ActiveRecordとか、FLVTool2とか、気になる名前もあります。

2008-03-09CGIで環境変数を表示

Rubyでのプログラミングの組み方

| 22:45 |  Rubyでのプログラミングの組み方 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Rubyでのプログラミングの組み方 - Rubyを勉強しようと思ってはじめた日記  Rubyでのプログラミングの組み方 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

書いてみて思ったのは、一揃いはあるわけです。

  • テンプレートエンジン(ERB
  • cgi

問題は、こうしたライブラリを探す方法とか、ドキュメントとか、どうしていけばいいのかなあ?というのが気になります。CPANや、Pearがいいのは、こうした点かも。

たぶん、RAAを見たらいいのかなあ。う~ん。

PerlとかPHPの場合

「とりあえず、CPANとかPearを見る」というのは、RubyだとRAAを見たらいいのだろうか?もうちょっと調べてみよう。

次の課題


テンプレートエンジン(ERB)

| 21:11 |  テンプレートエンジン(ERB) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  テンプレートエンジン(ERB) - Rubyを勉強しようと思ってはじめた日記  テンプレートエンジン(ERB) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

テンプレートエンジンなのかどうかわかりませんが、Ruby on Railsで使っているのがERBというものらしい。

PHPのSmartyとかと違って、テンプレートファイルを渡してインスタンスを作って、runファンクションを実行する。それだけで値が渡っているよ!どいうことだろう...。

参考に?した

実行スクリプト

#!/usr/local/bin/ruby
require "erb"
require "cgi"
print "Content-Type: text/html\n\n"

filename = './ruby.html'

templates = ERB.new(File.read(filename),nil,"-")
form      = CGI.new
templates.run

テンプレートファイル

<html>
<head>
<title>Template HTML</title>
</head>
<body>

<p>CGI<%= form['text']%></p>

</body>
</html>

CGIライブラリを使ってみる

| 15:56 |  CGIライブラリを使ってみる - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  CGIライブラリを使ってみる - Rubyを勉強しようと思ってはじめた日記  CGIライブラリを使ってみる - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

CGIライブラリを使う。

PerlのCGI.pmと似ている感じです。

#!/usr/local/bin/ruby
require "cgi"
print "Content-Type: text/html\n\n"

form = CGI.new
print form['text']
print CGI.escapeHTML(form['text'])              

テンプレートエンジンになるクラスはなんだろう。


CGIで環境変数を表示

| 15:40 |  CGIで環境変数を表示 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  CGIで環境変数を表示 - Rubyを勉強しようと思ってはじめた日記  CGIで環境変数を表示 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Webアプリケーションの第一歩。CGIで、環境変数を表示してみました。

#!/usr/local/bin/ruby

print "Content-Type: text/html\n\n"

ENV.each{|key,value|
    print '[',key,'] '
    print value
    print "<br>\n"
}

感想

Rubyには、eachがあるとか、基本の文法はやっぱり何度も使ったりしないと覚えないなあ、と実感。

muscovyduckmuscovyduck2008/03/10 07:46ライブラリを探すなら、RubyGemsはいかがでしょうか。
http://jp.rubyist.net/magazine/?0010-PackageManagement

d4-1977d4-19772008/03/10 13:36id:muscovyduckさんありがとうございます。RubyGemsもありますね。
実際に見てみました。
RubyGemsの方がRailsでメジャー街道を走っている感じもします。
RubyGemsでも探してみます。

2008-03-02はじめてのRuby(14)

ひと段落

| 21:05 |  ひと段落 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  ひと段落 - Rubyを勉強しようと思ってはじめた日記  ひと段落 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Mix-inについてで本に載っていたのは終わり。

この後は、実際に作ってみよう、という話になります。

何をつくろうかなあ...。テキストベースの何かをいじるのをまずしてみようかなあ。

Mix-in(4)メソッドの検索ルール

| 18:43 |  Mix-in(4)メソッドの検索ルール - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Mix-in(4)メソッドの検索ルール - Rubyを勉強しようと思ってはじめた日記  Mix-in(4)メソッドの検索ルール - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

  • 元のクラスで定義されたメソッドが優先
  • 同じクラスに複数のモジュールがインクルードされた場合、後からインクルードされたのが優先
  • 同じモジュールを2回以上インクルードされた場合、2回目以降は無視される

Mix-in(3)

| 18:39 |  Mix-in(3) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Mix-in(3) - Rubyを勉強しようと思ってはじめた日記  Mix-in(3) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

  • インクルードされたモジュールは、仮想的なスーパークラス
  • Rubyは、単純継承のみ。複数のスーパークラスをもてない。

Mix-in(2)

| 18:39 |  Mix-in(2) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Mix-in(2) - Rubyを勉強しようと思ってはじめた日記  Mix-in(2) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

組み込みのMix-inモジュール

Comparable

インスタンス同士を比較するためのメソッドを追加する

Enumerable

  • 今まで何回か出ているモジュール
  • 数えたり、列挙したりする

他にどんなMix-inモジュールが標準にあるんだろう?

Mix-in(1)

| 18:15 |  Mix-in(1) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク -  Mix-in(1) - Rubyを勉強しようと思ってはじめた日記  Mix-in(1) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Mix-inってなにか?

  • 複数のクラスで機能を共有するための入れ物としてのモジュール

モジュールの例

module M
    def meth
        puts "meth"
    end 
end

class C
    include M
end

c = C.new
c.meth # meth
カレンダー
2007 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2009 | 06 | 08 |