<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6834098482830840276</id><updated>2011-04-22T05:36:59.867+09:00</updated><category term='Ruby'/><category term='programming'/><title type='text'>takao's diary （お勉強部屋）</title><subtitle type='html'>お勉強の記録です。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-3078734637568930365</id><published>2008-10-02T09:53:00.001+09:00</published><updated>2008-10-02T11:56:53.648+09:00</updated><title type='text'>初めてのRuby (9)</title><content type='html'>第９章&lt;br /&gt;&lt;br /&gt;RubyGems&lt;br /&gt;インストール済みの一覧　gem list&lt;br /&gt;インストール可能な一覧　gem list -r&lt;br /&gt;検索　gem search -r postgres（パターン）&lt;br /&gt;インストール　　　　　　gem install evil-ruby&lt;br /&gt;更新　　　　　　　　　　gem update&lt;br /&gt;&lt;br /&gt;おすすめのGems&lt;br /&gt;rake ruby-debug active-support &lt;br /&gt;&lt;br /&gt;ネットワーク&lt;br /&gt;　標準添付ライブラリ　HTTP, SMTP, POP3, IMAP, FTP。より低水準の処理をするためのsocketライブラリもある。&lt;br /&gt;  require 'open-url'&lt;br /&gt;  open("http://www.oreilly.co.jp") {|connection|&lt;br /&gt;    connection.each_line do |line|&lt;br /&gt;      print line&lt;br /&gt;    end&lt;br /&gt;  }&lt;br /&gt;データベースに対応するライブラリがgem形式で提供されている。&lt;br /&gt;画像ライブラリ　&lt;br /&gt;GUIライブラリ&lt;br /&gt;Continuationオブジェクト&lt;br /&gt;　require 'continuation' if RUBY_VERSION &gt;='1.9'&lt;br /&gt;  1.upto(10) do |i|&lt;br /&gt;    if i == 3&lt;br /&gt;      $cont = callcc{|continuation|&lt;br /&gt;          continuation&lt;br /&gt;      }&lt;br /&gt;   end&lt;br /&gt;   print i, ' '&lt;br /&gt;  end&lt;br /&gt;  #cont.call(nil) if $cont&lt;br /&gt;  #=&gt;  1 2 3 4 ...... 10&lt;br /&gt;&lt;br /&gt; continutation の実行例はRubyではあまりない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-3078734637568930365?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/3078734637568930365/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=3078734637568930365' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/3078734637568930365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/3078734637568930365'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/10/ruby-9.html' title='初めてのRuby (9)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-5730069078122276426</id><published>2008-10-01T16:19:00.005+09:00</published><updated>2008-10-02T09:52:54.704+09:00</updated><title type='text'>初めてのRuby (8)</title><content type='html'>第８章　オブジェクトとクラス&lt;br /&gt;&lt;br /&gt;継承　&lt;br /&gt;　class Duration &lt; Range&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;インスタンスメソッドの定義&lt;br /&gt;　class Duration&lt;br /&gt;    def display; puts self end&lt;br /&gt;  end&lt;br /&gt;  duration = Duration.new&lt;br /&gt;  duration.display&lt;br /&gt;&lt;br /&gt;クラスメソッドの定義&lt;br /&gt;　class Duration&lt;br /&gt;    def Duration.print(x); p x end&lt;br /&gt;  end&lt;br /&gt;  Duration.print 1  #=&gt; 1&lt;br /&gt;  次の定義もある。&lt;br /&gt;　class Duration&lt;br /&gt;    def self.print(x); p x end&lt;br /&gt;  end&lt;br /&gt;  Duration.print &lt;br /&gt;&lt;br /&gt;インスタンス化するクラスメソッドnew&lt;br /&gt;　class Duration&lt;br /&gt;    def initialize(since, till)&lt;br /&gt;      @since = since&lt;br /&gt;      @until = till&lt;br /&gt;    end&lt;br /&gt;    attr_accessor :since, :until&lt;br /&gt;  end&lt;br /&gt;  duration = Duration.new(Time.now, Time.now + 3600)&lt;br /&gt;  p duration.until&lt;br /&gt;  p duration.since = Time.new&lt;br /&gt;&lt;br /&gt;  duration.since += 10&lt;br /&gt;  duration.since = (duration.sinc() + 10)&lt;br /&gt;&lt;br /&gt;クラス定義の追加&lt;br /&gt;　class String&lt;br /&gt;   def caesar; tr 'a-zA-Z', 'n-za-mN-ZA-M' end&lt;br /&gt;  end&lt;br /&gt;  puts "Learning Ruby".ceasar  #=&gt; Yrneavat Ehol&lt;br /&gt;&lt;br /&gt;クラスの上書きの禁止　Fixnum.freeze&lt;br /&gt;&lt;br /&gt;スーパークラスの呼び出し&lt;br /&gt;　class Duration&lt;br /&gt;    def display(targt=&gt;$&gt;)&lt;br /&gt;      super   # super(target)に同じ&lt;br /&gt;　　　 target.write "(#{self.since}-#{self.until})"&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;  dusration.display&lt;br /&gt;&lt;br /&gt;　クラス変数　クラスと子孫クラスとそれらのすべてのインスタンスの間で共有&lt;br /&gt;&lt;br /&gt;　定数　クラスに属するimmutable変数&lt;br /&gt;&lt;br /&gt;　class Duration&lt;br /&gt;   DAYS_OF_WEEK = 7&lt;br /&gt;   p DAYS_OF_WEEK&lt;br /&gt;&lt;br /&gt;   def print_days_of_week&lt;br /&gt;    p DAYS_OF_WEEK&lt;br /&gt;   end&lt;br /&gt;  end&lt;br /&gt;  p Duration::DAYS_OF_WEEK&lt;br /&gt;&lt;br /&gt; アクセス制限&lt;br /&gt;&lt;br /&gt;　public どこからでも呼び出し可能&lt;br /&gt;　protected クラスまたはサブクラスのインスタンスメソッドからのみ可能&lt;br /&gt;　private selfに対してのみ&lt;br /&gt;　　protected privateがJava C# と意味が異なる。&lt;br /&gt;&lt;br /&gt;特異メソッド&lt;br /&gt;　Singletonパターン&lt;br /&gt;　　システム内のある種の情報を集中管理するクラスなど&lt;br /&gt;　　CENTRAL_REPOSITORY = Object.new&lt;br /&gt;    def CENTRAL_REPOSITORY.register(target)&lt;br /&gt;      @registerd_objects ||= []&lt;br /&gt;      unless @registered_objects.include? target&lt;br /&gt;        @registerd_objects &lt;&lt; target&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;    def CENTRAL_REPOSITORY.unregister(target)&lt;br /&gt;      @registerd_objects ||= []&lt;br /&gt;      @registgered_objects.delete(target)&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;クラスメソッドは、Classオブジェクトの特異メソッド&lt;br /&gt;  class Duration&lt;br /&gt;   def self.a_week_from(from)&lt;br /&gt;     return self.new(from, from+7*24*60*60)&lt;br /&gt;   end&lt;br /&gt;  end&lt;br /&gt;  p Duration.a_week_from(Time.now)&lt;br /&gt;&lt;br /&gt;  特異メソッドでクラスメソッドを定義する流儀もある。&lt;br /&gt;&lt;br /&gt;　class Duration&lt;br /&gt;    class &lt;&lt; self&lt;br /&gt;   ...&lt;br /&gt;&lt;br /&gt;モジュール&lt;br /&gt;　インスタンス化できないクラスのようなもの&lt;br /&gt;Mix-in 制限された多重継承（Mix-inはアイスクリームの上にのせるトッピングに由来）&lt;br /&gt;&lt;br /&gt;モジュールのincludeはちょっとした実装を複数のクラスで共有するための仕組み。&lt;br /&gt;&lt;br /&gt;Comparableは大小比較機能をトッピングするモジュール&lt;br /&gt;"an" &lt; "and"  #=&gt; false&lt;br /&gt;&lt;br /&gt;class Foo&lt;br /&gt;  include Comparable&lt;br /&gt;  def &lt;=&gt;(rhs)&lt;br /&gt;    # 何らかの実装&lt;br /&gt;　end&lt;br /&gt;end&lt;br /&gt;foo1 = Foo.new&lt;br /&gt;foo2 = Foo.new&lt;br /&gt;foo1 &lt;= foo2 # Comaparableが提供&lt;br /&gt;&lt;br /&gt;includeしたモジュールはクラスのancestorsメソッドで知る&lt;br /&gt;　String.include  #=&gt; [String, Comparable, Object, Kernel, BasicObject]&lt;br /&gt;&lt;br /&gt;Kernelは組み込み定数や組み込み関数を保持しているモジュール&lt;br /&gt;&lt;br /&gt;拡張部分をモジュールとしてまとめてから、include&lt;br /&gt;class Numeric&lt;br /&gt;  include ActiveSupport::CoreExtensions::Numeric::Bytes&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;名前空間&lt;br /&gt;  class Service; end&lt;br /&gt;  module Library&lt;br /&gt;    class Service; end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt; 最初のServiceはトップレベルの名前空間。後のは、モジュールLibraryに属している。&lt;br /&gt;　::Service   # トップレベルのService&lt;br /&gt;  Library::Service # LibraryのService&lt;br /&gt;&lt;br /&gt;メソッドの探索&lt;br /&gt;　・特異メソッド　インスタンスメソッド　includeしたモジュールのインスタンスメソッド　親クラスのインスタンスメソッド　&lt;br /&gt;&lt;br /&gt;Rubyはオーバーロードの機能はない。&lt;br /&gt;内部で引数の数やクラスを調べて処理を振り分けている。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;；&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-5730069078122276426?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/5730069078122276426/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=5730069078122276426' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/5730069078122276426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/5730069078122276426'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/10/ruby-8.html' title='初めてのRuby (8)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-7258378925374439115</id><published>2008-09-29T14:37:00.004+09:00</published><updated>2008-09-30T14:52:58.349+09:00</updated><title type='text'>初めてのRuby(7)</title><content type='html'>第７章　メソッド&lt;br /&gt;　&lt;br /&gt;　メソッドとは、オブジェクトに対するメッセージ送信&lt;br /&gt;　その他、関数的メソッドもある。&lt;br /&gt;&lt;br /&gt;　メソッド呼び出し　レシーバ.メソッド名(引数)&lt;br /&gt;  　　　　　　　　　a.some_method(1, "str") &lt;br /&gt;                  a::some_method(1, "str")　どっちも可。&lt;br /&gt;　&lt;br /&gt;　メソッド連鎖　メソッドの戻り値に対してメソッドを呼ぶ（適用する）&lt;br /&gt;　　　　escaped_str = str.gsub(/&amp;/, '&amp;amp;').gsub(/&amp;lt/, '&amp;lt;').gsub(/&gt;/, '&amp;gt;')&lt;br /&gt;&lt;br /&gt;　レシーバの省略　→　デフォルトのレシーバであるselfに対してメソッドを呼び出す。&lt;br /&gt;　　（p selfで確認）&lt;br /&gt;&lt;br /&gt;　引数を持たないメソッドのレシーバを省略すると、ローカル変数の参照と見分けがつかないが、この場合はローカル変数が優先。&lt;br /&gt;&lt;br /&gt;　関数的メソッド　p Math.sin　など&lt;br /&gt;　組み込み関数　puts p &lt;br /&gt;&lt;br /&gt;　メソッドの定義&lt;br /&gt;　　返値は最後の評価値　、return 式では、その値。returnだけだと、nilが返る。&lt;br /&gt;&lt;br /&gt;　多値の返却&lt;br /&gt;　　def some_method(a)&lt;br /&gt;      return a, 1, 2, 3&lt;br /&gt;    end&lt;br /&gt;    a, b, *c = *some_method(0)&lt;br /&gt;   &lt;br /&gt;    def some_method(a)&lt;br /&gt;      [a, 1, 2, 3]&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    Ｃ言語におけるvoidのように値を返さないメソッドはない。返値に使い道がないメソッドの実装では最後にnilを書く人もいる。&lt;br /&gt;&lt;br /&gt;　　&lt;br /&gt;　デフォルト値&lt;br /&gt;　　　def some_method(a, b, c = 1)  # cは省略可能。デフォルト値は1&lt;br /&gt;     end&lt;br /&gt;&lt;br /&gt;　デフォルト値の算出に式が用いられている場合、毎回その式を評価。&lt;br /&gt;　　def print_time(time = Time.now)&lt;br /&gt;      p time&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;　可変長引数&lt;br /&gt;　　def some_method(a, b, *c)&lt;br /&gt;      p [a, b, c]&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;   some_method(1,2,3,4,5)   #=&gt; [1,2,[3,4,5]]&lt;br /&gt;&lt;br /&gt;　　クロージャーとしてのブロック&lt;br /&gt;　　　ブロック中の自由変数はブロックの外部環境に従う。&lt;br /&gt;&lt;br /&gt;　ブロックローカル変数&lt;br /&gt;　last_odd = nil&lt;br /&gt;  (1..10).each do |i|&lt;br /&gt;    last_odd = i if i%2 != 0&lt;br /&gt;  end&lt;br /&gt;  p last_odd   #=&gt; 9&lt;br /&gt;&lt;br /&gt;　ブロック付きのメソッドの定義&lt;br /&gt;　　yield式は、メソッド内から呼び出し側のブロックをコールバックする構文。式の値をブロック呼び出し時にブロック引数として渡す。&lt;br /&gt;&lt;br /&gt;　def foo_bar_baz&lt;br /&gt;   yield "foo"&lt;br /&gt;   yield "bar"&lt;br /&gt;   yield "baz"&lt;br /&gt;  end&lt;br /&gt;  foo_bar_baz do |item|&lt;br /&gt;   puts item&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;　他のブロック付きメソッドを利用してブロック付きメソッドを実装することもよくある。&lt;br /&gt;　def foo_bar_baz2&lt;br /&gt;   %w[ foo bar baz ].each do |item|&lt;br /&gt;     yield item&lt;br /&gt;   end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt; yield式はブロックの評価値を返すので、mapもどきを実装できる。&lt;br /&gt;　def my_map&lt;br /&gt;    [yeild(1), yield(2), yeild(3)]&lt;br /&gt;  end&lt;br /&gt;  p my_map {|i| i+1}  #=&gt;[2,3,4]&lt;br /&gt;　　&lt;br /&gt;　呼び出し側のブロックをオブジェクトして取得するには、仮引数リストの最後に&amp;で修飾された引数を置く。この引数に、呼び出し側のブロックを表すProcオブジェクトが格納される。&lt;br /&gt;&lt;br /&gt;　class SleepyPerson&lt;br /&gt;    def register_handler(&amp;handler)&lt;br /&gt;      @event_handler = handler&lt;br /&gt;    end&lt;br /&gt;    def wake_up!&lt;br /&gt;      @event_handler.call Time.now, "woke up"&lt;br /&gt;    end&lt;br /&gt;    john = SleepyPerson.new&lt;br /&gt;    john.register_handler {|time, message| p [time, message]}&lt;br /&gt;    john.wake_up!&lt;br /&gt;    ブロックは環境を保存するので、ブロックをProc化してためておき、後で使う。&lt;br /&gt;&lt;br /&gt;　　Procオブジェクトをブロック付きメソッドに渡す。&lt;br /&gt;　　proc = Proc.new { puts "Proc was called" }&lt;br /&gt;    3.times(&amp;proc)&lt;br /&gt;    #=&gt; Proc was called&lt;br /&gt;        Proc was called&lt;br /&gt;        Proc was called&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-7258378925374439115?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/7258378925374439115/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=7258378925374439115' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/7258378925374439115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/7258378925374439115'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby7.html' title='初めてのRuby(7)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-226381082152463597</id><published>2008-09-28T17:59:00.002+09:00</published><updated>2008-09-28T20:43:23.900+09:00</updated><title type='text'>初めてのRuby (6)</title><content type='html'>第６章　変数と式&lt;br /&gt;&lt;br /&gt;　変数とはオブジェクトへの参照を保持しているもの&lt;br /&gt;　　&lt;br /&gt;　メソッドで、引数オブジェクトを変更すると、変更されてしまう。&lt;br /&gt;　→まず、複製して変更すると、元のオブジェクトに影響を与えない。&lt;br /&gt;　　def describe(name)&lt;br /&gt;      name = name.dup&lt;br /&gt;      puts "This is a #{name}."&lt;br /&gt;      name[2]=?P&lt;br /&gt;      puts "This is a #{name}."&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt; 変数の種類&lt;br /&gt;　定数　大文字表記  CONSTANT&lt;br /&gt;　グローバル変数　　$variable&lt;br /&gt;  クラス変数　　　　@@class_variable&lt;br /&gt;  インスタンス変数　@instance_variable&lt;br /&gt;　ローカル変数　　　variable, _variable 　&lt;br /&gt;&lt;br /&gt;　グローバル変数　$stdout $: ライブラリ組み込み時の探索パス　$1 最後の正規表現マッチ&lt;br /&gt;&lt;br /&gt;　定数　警告でるが、mutable&lt;br /&gt;　ライブラリの定数　File::RDWR  File::CREAT&lt;br /&gt;&lt;br /&gt;  擬似変数　nil true false self&lt;br /&gt;   __FILE__ ソースファイル名　__LINE__ 行番号&lt;br /&gt;&lt;br /&gt;　慣習的制約　×　PascalStyle 大文字小文字で区切る。クラス名は例外で、この方式。&lt;br /&gt;&lt;br /&gt;　incremetnt decrementはない。&lt;br /&gt;　&lt;br /&gt;　多重代入　a, b, c = 1, 2, 3&lt;br /&gt;           a, b = b, a　は可能。&lt;br /&gt;&lt;br /&gt;　a, *b = 1, 2, 3, 4, 5&lt;br /&gt;  p b  #=&gt; [2, 3, 4, 5]&lt;br /&gt;&lt;br /&gt;  array = [1, 2, 3]&lt;br /&gt;  a, b, c = *array&lt;br /&gt;  p a; p b; p c    #=&gt; 1 2 3&lt;br /&gt;&lt;br /&gt;  Rubyにおいて、偽とは、nil 及び falseのこと。それ以外は真。0も真。この点は、C Perl PHPと異なる。&lt;br /&gt;&lt;br /&gt;　論理積&amp;&amp;や論理和||はtrueやfalseではなく、オペランドのいずれかを返す。Ｃ語族とは異なる。&lt;br /&gt;　例　nil || 50  #=&gt; 50&lt;br /&gt;&lt;br /&gt; @a ||= generate_default_value @aが真なら何もせず、偽なら、generate_default_valueメソッドを呼んでそのreturn value でaを初期化する。&lt;br /&gt;&lt;br /&gt;　1..10 including 10&lt;br /&gt;  1...10 exlcuding 10&lt;br /&gt;&lt;br /&gt;  条件演算子　&lt;br /&gt; var = a ? b: c&lt;br /&gt; var = if a then b else c end に同じ&lt;br /&gt;&lt;br /&gt;　制御式　値を返す。&lt;br /&gt;　　thought = if sample.color == "green" then&lt;br /&gt;      "danger"&lt;br /&gt;    else&lt;br /&gt;      "undefined"&lt;br /&gt;    end&lt;br /&gt;   if式の真偽に応じてthoughtに異なる値を代入。&lt;br /&gt;&lt;br /&gt;　　if ...&lt;br /&gt;      ...&lt;br /&gt;    elsif ...&lt;br /&gt;      ...&lt;br /&gt;    else&lt;br /&gt;      ....&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;  if修飾子　do_something if condition  　# endが不要&lt;br /&gt;   &lt;br /&gt;   unless&lt;br /&gt;   （例外状況の対処）unless (通常は成立する条件)&lt;br /&gt;   &lt;br /&gt;　case value&lt;br /&gt;  when 1 then&lt;br /&gt;    ...&lt;br /&gt;  when 2,3 then&lt;br /&gt;    ...&lt;br /&gt;  else&lt;br /&gt;    ...&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  範囲分岐　正規表現による分岐もある。&lt;br /&gt;　&lt;br /&gt;　===は==より緩く一致性は判定&lt;br /&gt;　　if 0 === value then&lt;br /&gt;     '0'&lt;br /&gt;    elsif (1..9) === value then&lt;br /&gt;     'one keta'&lt;br /&gt;    else&lt;br /&gt;     'else'&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;   case&lt;br /&gt;   when number.prime?  then process_prime(number)&lt;br /&gt;   when number.fermat? then process_crmichel(number)&lt;br /&gt;   when number.odd?    then process_odd_composite(number)&lt;br /&gt;   else                     process_even_composite(number)&lt;br /&gt;   endd&lt;br /&gt;&lt;br /&gt;   while condition [do]&lt;br /&gt;     do_something&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;  do_something while condtion&lt;br /&gt;&lt;br /&gt;  後置while 最初に１回は無条件に実行&lt;br /&gt;　　def more?&lt;br /&gt;     gets.chomp != 'ok'&lt;br /&gt;    end&lt;br /&gt;    begin&lt;br /&gt;     $stdout.print " enter 'ok' if .."&lt;br /&gt;    end while more?&lt;br /&gt;&lt;br /&gt;　　untilもある。&lt;br /&gt;&lt;br /&gt;  for式は内部でイテレータを呼んでいる。&lt;br /&gt;&lt;br /&gt;　　for nme, num in [['Jan', 1], ['Feb', 2]]&lt;br /&gt;     puts "#{name} は #{num}月"&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;　　イテレータ&lt;br /&gt;　　loop do &lt;br /&gt;     puts "hello"&lt;br /&gt;   end&lt;br /&gt;   &lt;br /&gt;   3.times {puts "Hello"}    3.times{|i| puts i}&lt;br /&gt;   1.upto(3) do |i| puts i end     downto&lt;br /&gt;&lt;br /&gt;  脱出&lt;br /&gt;&lt;br /&gt;　　loop do&lt;br /&gt;     puts "owari"&lt;br /&gt;     break if /^owari/ =~ gets&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    a = loop { break 1 }&lt;br /&gt;    p a   #=&gt; 1&lt;br /&gt;&lt;br /&gt;    1.upto(3) do |i|&lt;br /&gt;      next if i == 2  # 2ならスキップして、次の繰り返しへ&lt;br /&gt;    puts i&lt;br /&gt;    # =&gt; 1 3&lt;br /&gt;&lt;br /&gt;　　例外処理&lt;br /&gt;　　　&lt;br /&gt;　　　begin&lt;br /&gt;       do_something&lt;br /&gt;     rescue TypeError&lt;br /&gt;       ..&lt;br /&gt;     rescue =&gt; another_error&lt;br /&gt;       ..&lt;br /&gt;     else&lt;br /&gt;       ..&lt;br /&gt;     ensure&lt;br /&gt;       ..     # 例外が発生してもしなくても必ず実行&lt;br /&gt;     end&lt;br /&gt;&lt;br /&gt;　　 raise ArgumentError, 'message' ユーザーが明示的に例外を発生させるにはraise関数を使う。&lt;br /&gt;&lt;br /&gt;　　大域脱出　catch throw&lt;br /&gt;&lt;br /&gt;　　　catch(:exit) {&lt;br /&gt;       loop do&lt;br /&gt;         loop do&lt;br /&gt;           throw :exit&lt;br /&gt;         end&lt;br /&gt;       end&lt;br /&gt;      }&lt;br /&gt;      #ここに脱出。&lt;br /&gt;&lt;br /&gt;　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-226381082152463597?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/226381082152463597/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=226381082152463597' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/226381082152463597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/226381082152463597'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby-6.html' title='初めてのRuby (6)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-9019465664412817658</id><published>2008-09-28T00:57:00.002+09:00</published><updated>2008-09-28T01:10:37.819+09:00</updated><title type='text'>【初めてのRuby】(5)</title><content type='html'>第５章　入出力&lt;br /&gt;&lt;br /&gt;　ARGV 引数の配列&lt;br /&gt;&lt;br /&gt;　ファイル&lt;br /&gt;　　File.open("text"){|f|&lt;br /&gt;     contents = f.read&lt;br /&gt;     print contents&lt;br /&gt;   }                      # ファイルが自動的に閉じられる&lt;br /&gt;&lt;br /&gt;　ファイルのモード&lt;br /&gt;　　File.open("time.log", 'a'){|f|&lt;br /&gt;     f.puts Time.now&lt;br /&gt;    }                     # append mode&lt;br /&gt;&lt;br /&gt;  File.open("txt", File::WRONLY|File::CREAT){|f|&lt;br /&gt;   # do someting&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  イテレータ　&lt;br /&gt;　File.open("txt"){|f|&lt;br /&gt;   f.each_line do |line|&lt;br /&gt;    print "#{f.lineno}: #{line}"&lt;br /&gt;   end&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ARGF 引数に基づく仮想ファイル&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-9019465664412817658?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/9019465664412817658/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=9019465664412817658' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/9019465664412817658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/9019465664412817658'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby5.html' title='【初めてのRuby】(5)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-3966442207118652973</id><published>2008-09-27T23:59:00.002+09:00</published><updated>2008-09-28T00:55:38.108+09:00</updated><title type='text'>【初めてのRuby】(4)</title><content type='html'>第４章　文字列&lt;br /&gt;&lt;br /&gt;式展開&lt;br /&gt;　a =2&lt;br /&gt;  "aの値は#{a}" "aの5乗は#{a**5}"&lt;br /&gt;   "現在時刻：#{Time.now}"&lt;br /&gt;&lt;br /&gt;  バッククオート　`date`&lt;br /&gt; &lt;br /&gt;　%記法&lt;br /&gt;　　%!hoge!  バックスラッシュ記法及び式展開が有効&lt;br /&gt;　　%q!hoge! 　が無効&lt;br /&gt;　　%w! hoge hogu higu! 配列&lt;br /&gt;　　%W!hoge hogu higu! 配列。　　　が有効&lt;br /&gt;　  %r!hoge!  正規表現リテラル&lt;br /&gt;　　&lt;br /&gt;　ヒアドキュメント&lt;br /&gt;　　count = database_connectior.get_int(&lt;&lt;"EOS" % author.id)&lt;br /&gt;        SELECT COUNT(*)&lt;br /&gt;        FROM book&lt;br /&gt;        WHERE book.author_id = %d&lt;br /&gt;    EOS&lt;br /&gt;&lt;br /&gt;　　EOSの前に空白文字をいれるには、　&lt;&lt;-'EOS'&lt;br /&gt;&lt;br /&gt;　　正規表現&lt;br /&gt;　　&lt;br /&gt;      .*? 任意の文字列&lt;br /&gt;　　$1&lt;br /&gt;   &lt;br /&gt;　　正規表現リテラル&lt;br /&gt;　　　/regexp/iu&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    story =  &amp;lt&amp;lt EOS&lt;br /&gt;    .........&lt;br /&gt;   EOS&lt;br /&gt;  &lt;br /&gt;   story.gsub(/Solomon  Grundy/, "Hippopotamus")&lt;br /&gt;   story.gsub.(/\w+?)day/){"#{$1}."}&lt;br /&gt;&lt;br /&gt;  "str" + "ing"&lt;br /&gt;   str = "str"; str &amp;lt&amp;lt "ing"&lt;br /&gt;&lt;br /&gt;  "Look! " * 3 #=&gt;"Look! Look! Look! "&lt;br /&gt;  "a,bb, ccc, ddd".split(/,\s?/)   #=&gt; ["a", "bb", "cc", "ddd"]&lt;br /&gt;  "string".split(//)&lt;br /&gt;&lt;br /&gt; 　比較　==   &lt; &lt;br /&gt;    "ad" &lt;=&gt; "ac"   #=&gt; 1&lt;br /&gt;   メソッド　　reverse   strip   length&lt;br /&gt;&lt;br /&gt;   イテレータ　each_line&lt;br /&gt;&lt;br /&gt;　sprintf("%04d", 3)    #=&gt; "0003"&lt;br /&gt;  "%04d" % 3&lt;br /&gt;  sprintf("%08.4f", Math::PI*10)   #=&gt;  "031.4159"&lt;br /&gt;  "%08.4f" % (Math::PI *10)&lt;br /&gt;  &lt;br /&gt;　シンボル&lt;br /&gt;　　:if :"anna terras"&lt;br /&gt;&lt;br /&gt;   シンボルは内容が同値であれば(==)、同一オブジェクト(equal?)で、immutable&lt;br /&gt;   ハッシュのキーに適している。&lt;br /&gt;&lt;br /&gt;　日本語対応&lt;br /&gt;   $KCODE = 'SJIS'&lt;br /&gt;&lt;br /&gt;  regexp = /(.)/s  SJISモードの正規表現&lt;br /&gt;　regexp = /(.)/n バイト列モードの正規表現&lt;br /&gt;&lt;br /&gt;　ソースファイル等はUTF-8を使用し、外部との入出力の際にだけ必要に応じてコード変換するのが普通。&lt;br /&gt;　メソッド encoding lenghth bytesize&lt;br /&gt;&lt;br /&gt;　マジックコメント　# -*- coding: utf-8 -*-&lt;br /&gt;                               # vim:fileencodig=UTF-8&lt;br /&gt;　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-3966442207118652973?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/3966442207118652973/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=3966442207118652973' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/3966442207118652973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/3966442207118652973'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby4.html' title='【初めてのRuby】(4)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-6673421652872103590</id><published>2008-09-25T17:32:00.004+09:00</published><updated>2008-09-26T13:52:49.787+09:00</updated><title type='text'>【初めてのRuby】(3)</title><content type='html'>第３章　数値&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.1 整数・浮動小数点&lt;br /&gt;&lt;br /&gt;　　100_000_000&lt;br /&gt;&lt;br /&gt;　　6.02e23&lt;br /&gt;&lt;br /&gt;6.626_068_96e-34&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1.0/0.0).infinite? =&gt;1&lt;br /&gt;&lt;br /&gt;(0.0/0.0).nan? =&gt; true&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3**5 =&gt;245&lt;br /&gt;&lt;br /&gt;7/0 =&gt; error&lt;br /&gt;&lt;br /&gt;7.0/0 =&gt; Infinity&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-7.dvimod(2) =&gt; [-4,1] 整除と剰余&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　see Integer Float Numeric&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　その他の数値・代数系クラス&lt;br /&gt;&lt;br /&gt;　　complex rational bigdecimal matrix&lt;br /&gt;&lt;br /&gt;３．３　比較　== !=    &lt;=&gt;&lt;br /&gt;         array.sort {x,y&lt;br /&gt;           x.some_attribute &lt;=&gt; y.some_attribute&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;３．４　数学関数&lt;br /&gt;　　　　Math.acos(x)    Math::sqrt(x)   Math::E  Math::PI&lt;br /&gt;&lt;br /&gt;           include Math&lt;br /&gt;           cos(0)&lt;br /&gt;          includeの使用は注意。&lt;br /&gt;３．５　ビット演算　&amp;amp; ^ ~ &lt;&lt; &gt;&gt;&lt;br /&gt;         整数はimmutable&lt;br /&gt;          a[0] ビット位置へのアクセス&lt;br /&gt;&lt;br /&gt;　　　多項式、超準解析、テンソルなどは外部ライブラリあり。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-6673421652872103590?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/6673421652872103590/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=6673421652872103590' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/6673421652872103590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/6673421652872103590'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby3.html' title='【初めてのRuby】(3)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-974429862607659711</id><published>2008-09-24T00:01:00.003+09:00</published><updated>2008-09-24T16:39:43.165+09:00</updated><title type='text'>【初めてのRuby】(2)</title><content type='html'>第２章&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;配列とハッシュは、他のオブジェクトへの参照を保管しており、オブジェクトそのものではない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;２．１　配列&lt;br /&gt;&lt;br /&gt;配列の構成法&lt;br /&gt;&lt;br /&gt;　c = [1, a, "str", [b,2]]&lt;br /&gt;&lt;br /&gt;配列要素の参照&lt;br /&gt;&lt;br /&gt;　c[0] #=&gt; 1&lt;br /&gt;&lt;br /&gt;c[3] #=&gt; [b,2]&lt;br /&gt;&lt;br /&gt;　※　c[3]はc.[](3)のsyntactic sugar . see Array#[]&lt;br /&gt;&lt;br /&gt;配列の部分参照&lt;br /&gt;&lt;br /&gt;　c[1,3] #=&gt; [a, "str", [b,2]]&lt;br /&gt;&lt;br /&gt;c[1..2] #=&gt; [a, "str"]&lt;br /&gt;&lt;br /&gt;配列要素のmutation&lt;br /&gt;&lt;br /&gt;a = [1, 2]&lt;br /&gt;&lt;br /&gt;a[0] = 3&lt;br /&gt;&lt;br /&gt;a[0,3] = 'a', 'b', 'c'&lt;br /&gt;&lt;br /&gt;a[1..2] = "?"&lt;br /&gt;&lt;br /&gt;配列は伸びたり、縮まったりする。&lt;br /&gt;&lt;br /&gt;　Array#[]= メソッド&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;その他配列メソッド&lt;br /&gt;&lt;br /&gt;　length size *= include? sort uniq uniq!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;イテレータ each   each_with_index map map sort select&lt;br /&gt;&lt;br /&gt;ブロック付きメソッドにおける　do end と{   }の使い分け&lt;br /&gt;- 基本的にdo endを使い、特別な場合に{  }とある。&lt;br /&gt;しかし、ブロック付きメソッドがhigher functionへの関数と考えると、&lt;br /&gt;do  endは非常にわかりにくい。{     } のほうがわかりやすいと思うのだが。慣れの問題か。&lt;br /&gt;&lt;br /&gt;２．２　ハッシュ&lt;br /&gt;h = { "a" =&gt; "aa",   "b" =&gt;"bb"}&lt;br /&gt;メソッド　each map&lt;br /&gt;&lt;br /&gt;２．３　Enumberable モジュール&lt;br /&gt;　def map&lt;br /&gt;       result = []&lt;br /&gt;       self.each {item result &lt;&lt; yield(item)}&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;  Enumerator は、each以外のイテレータに基づいてEnumerableの機能を提供するクラス。&lt;br /&gt;&lt;br /&gt;　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-974429862607659711?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/974429862607659711/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=974429862607659711' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/974429862607659711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/974429862607659711'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby2.html' title='【初めてのRuby】(2)'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6834098482830840276.post-7217653186250115307</id><published>2008-09-23T14:53:00.005+09:00</published><updated>2008-09-23T20:48:36.708+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>【初めてのRuby】</title><content type='html'>初めてのRubyで勉強。&lt;br /&gt;Windows XP ruby1.8.6&lt;br /&gt;&lt;br /&gt;１．１　objectとは&lt;br /&gt;- アイデンティを有する（unique, to know the self number and the class it belongs）&lt;br /&gt;- メッセージを受け取る&lt;br /&gt;---【疑問点】　メッセージを送っているのはだれか？神様か？環境か？&lt;br /&gt;---【疑問点】　オブジェクト同士がメッセージを送りあい、調和のとれた状態とか、アンバランスな状態とかをつくりだすことは可能か？&lt;br /&gt;- 内部状態を保つ（変数のこと？）&lt;br /&gt;&lt;br /&gt;someobject.object_id&lt;br /&gt;someobject.class&lt;br /&gt;&lt;br /&gt;イテレータ　繰り返し実行するブロック付きメソッド（higher functionと同じような機能)&lt;br /&gt;&lt;br /&gt;Ruby上で新たな言語を構築し、動かすのが、最近のRubyプログラミング　(Ruby on Rails?)&lt;br /&gt;&lt;br /&gt;例１－８&lt;br /&gt;d.days =&gt; 3&lt;br /&gt;p d.days =&gt; 3 =&gt;nil　なぜnilか？&lt;br /&gt;また、p　d.daysの場合、objectはどれか　pは何か？　メソッド？&lt;br /&gt;　d.days.print　は、あるのか。&lt;br /&gt;&lt;br /&gt;Rubyの機能の探し方&lt;br /&gt;- 文法　組み込み関数　組み込みクラス　標準添付ライブラリの順に探す。&lt;br /&gt;&lt;br /&gt;動的　クラスの定義は実行時　&lt;=&gt;　静的　C++  Java C# クラスやメソッドの定義はコンパイル時&lt;br /&gt;&lt;br /&gt;実行時ライブラリのロード&lt;br /&gt; require 'rational'&lt;br /&gt; load '/path/config.rb'&lt;br /&gt;&lt;br /&gt;command-line debuger:   ruby -rdebug hello.rb&lt;br /&gt;&lt;br /&gt;ri String ; ri File#read&lt;br /&gt;&lt;br /&gt;インスタンスメソッド　String#each_byte&lt;br /&gt;クラスメソッド　Time.now  Time::now&lt;br /&gt;&lt;br /&gt;1.class =&gt; Fixnum&lt;br /&gt;1.methods =&gt; ["%",&lt;br /&gt;&lt;br /&gt;Fixnum.ancestors  #=&gt; [Fixnum, Integer,   ]&lt;br /&gt;Fixnum.instance_methods #=&gt; ["%",  ]&lt;br /&gt;Fixnum.kind_of? Class #=&gt; true&lt;br /&gt;&lt;br /&gt;特異メソッド　特定のオブジェクトに属するメソッド&lt;br /&gt;a = "str"&lt;br /&gt;def a.greet&lt;br /&gt;  puts "I am the object #{self.object_id}"&lt;br /&gt;end&lt;br /&gt;a.greet #=&gt; I am the object 33334&lt;br /&gt;&lt;br /&gt;大部分の演算子はメソッドのsyntactic sugar =&gt; polymorphism&lt;br /&gt;1.2 + 3 #=&gt;4.2&lt;br /&gt;"str" + "ing" #=&gt; "string"&lt;br /&gt;1 &lt;&lt;&gt;4&lt;br /&gt;["a", "b"] &lt;&lt; "c" #=&gt; ["a", "b", "c"]&lt;br /&gt;$stdout &lt;&lt; "hi!" #=&gt; hi!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6834098482830840276-7217653186250115307?l=tako-takos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tako-takos.blogspot.com/feeds/7217653186250115307/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6834098482830840276&amp;postID=7217653186250115307' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/7217653186250115307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6834098482830840276/posts/default/7217653186250115307'/><link rel='alternate' type='text/html' href='http://tako-takos.blogspot.com/2008/09/ruby.html' title='【初めてのRuby】'/><author><name>takao</name><uri>http://www.blogger.com/profile/03169892596417466768</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
