読者です 読者をやめる 読者になる 読者になる

Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

初めてのRuby

初めてのRuby』を読んでみました。

  • Object#enum_for
  • Integer#[nth]
  • 3 + Complex(5, 6)のすごさ(coerce規約)
  • to_strメソッド
  • String#%
  • ダックタイピング

をはじめ、いろいろと勉強になりました。

例8-12を使って、

class Duration
  def initialize(since, till)
    @since = since
    @until = till
  end
  attr_accessor :since, :until

  def display(target=$>)
    super
    target.write "(#{self.since}-#{self.until})\n"
  end
end

duration = Duration.new(Time.now, Time.now + 3600)
duration.display

require 'stringio'
buffer = String.new
sio = StringIO.new(buffer)
duration.display(sio)
puts buffer

のように書いてみたのですが、これはダックタイピングと言ってもいいのでしょうか?

あと、9章において、「9.3 データベース」、「9.4 画像」、「9.5 GUI」でrubygemsを利用したサンプルが説明されていますが、

例9-2

require 'rubygems'
gem 'activerecord'
require 'active_record'

例9-3

require 'rubygems'
require 'gd2'

例9-4

require 'rubygems'
gem 'wxruby'
require 'wx'

例9-3だけが、gemの行がないのは何故なんだろうと思ってしまいました。ちなみに、

require 'rubygems'
gem 'gd2'
require 'gd2'

としても、動作しました。