<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>taichino.com &#187; ruby</title>
	<atom:link href="http://taichino.com/tag/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://taichino.com</link>
	<description>永遠のネバーランド</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:33:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>「7つの言語 7つの世界」1週目 Ruby</title>
		<link>http://taichino.com/programming/2444</link>
		<comments>http://taichino.com/programming/2444#comments</comments>
		<pubDate>Sun, 30 Oct 2011 06:05:05 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[7langs_in_7weeks]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=2444</guid>
		<description><![CDATA[「７つの言語 ７つの世界」を読み始める事にしました。 これは7つのプログラミング言語（Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell）を、それぞれ1週間ずつ7週間かけて学ぶという、なんともプログラマ心をくすぐる本です。また現状で僕が触れる言語は、C言語と似た制御構文を持っているものばかりなので、この本で取り上げられている言語をつまみ食いする事で、視野が広がったりして日々書くコードがもっと良くなったら良いなぁと思って読んでみる事にしました。 ちなみに各章は5つの節、&#8221;概要&#8221;, &#8220;1日目&#8221;, &#8220;2日目&#8221;, &#8220;3日目&#8221;, &#8220;まとめ&#8221;に分かれています。1日目〜3日目までが実際に手を動かしながら読み進める部分になっていて、練習問題がついています。学習効果が期待できそうなので練習問題の解いていく作業をまとめて行きたいと思います。 第一周目はRubyです。7つの中で唯一オブジェクト指向で取っ付きやすいので肩ならしには最適ですね。あと僕が触った事がある唯一の言語でもあります。 さて、本文を通してRubyはメリー・ポピンズに例えられていて、Rubyのプログラミングを楽しむというコンセプトが説明されています。僕は知らないのですが、メリー・ポピンズというのはディズニーに出てくるキャラクタで、家事を楽しく効率的に行う乳母という設定のようです。 1日目 1日目はRubyの特徴をirbの環境で触りながら説明しています。 まずはその純粋なオブジェクト指向性です。なるほど定数もきっちりオブジェクトなんですね。Javaで言うところのプリミティブ型みたいな、中途半端な要素がなくて綺麗ですね。 $ irb &#62;&#62; 4.class =&#62; Fixnum &#62;&#62; true.class =&#62; TrueClass そして後置ifやunlessなど、短く書ける条件分がイイネという話に続いて、動的片付けとダックタイピングについての説明で1日目は終わり。簡単なので練習問題もスキップします。 2日目 2日目は配列 => ハッシュ => ブロック => クラス定義と重要な機能を列挙しています。そして最後にMixinの説明があるのですが、恥ずかしながらこの機能を知りませんでした。これはモジュールという単位でメソッドの実装のみを切り出しておいて、必要に応じてクラスに組み込める仕組みのようです。以下のコードが例として上げられていました。ToFileモジュールに実装されているto_fというメソッドを、Personクラスにincludeして組み込んでいます。 module ToFile def filename &#34;object_#{self.object_id}.txt&#34; end &#160; def to_f File.open&#40;filename, 'w'&#41; &#123;&#124;f&#124; f.write&#40;to_s&#41;&#125; end end &#160; class [...]]]></description>
			<content:encoded><![CDATA[<p>「<a href="http://www.amazon.co.jp/gp/product/4274068579/ref=as_li_ss_tl?ie=UTF8&#038;tag=taichino-22&#038;linkCode=as2&#038;camp=247&#038;creative=7399&#038;creativeASIN=4274068579">７つの言語 ７つの世界</a><img src="http://www.assoc-amazon.jp/e/ir?t=taichino-22&#038;l=as2&#038;o=9&#038;a=4274068579" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />」を読み始める事にしました。</p>
<p>これは7つのプログラミング言語（Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell）を、それぞれ1週間ずつ7週間かけて学ぶという、なんともプログラマ心をくすぐる本です。また現状で僕が触れる言語は、C言語と似た制御構文を持っているものばかりなので、この本で取り上げられている言語をつまみ食いする事で、視野が広がったりして日々書くコードがもっと良くなったら良いなぁと思って読んでみる事にしました。</p>
<p>ちなみに各章は5つの節、&#8221;概要&#8221;, &#8220;1日目&#8221;, &#8220;2日目&#8221;, &#8220;3日目&#8221;, &#8220;まとめ&#8221;に分かれています。1日目〜3日目までが実際に手を動かしながら読み進める部分になっていて、練習問題がついています。学習効果が期待できそうなので練習問題の解いていく作業をまとめて行きたいと思います。</p>
<p><span id="more-2444"></span></p>
<p>第一周目はRubyです。7つの中で唯一オブジェクト指向で取っ付きやすいので肩ならしには最適ですね。あと僕が触った事がある唯一の言語でもあります。</p>
<p>さて、本文を通してRubyは<a href="http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AA%E3%83%BC%E3%83%BB%E3%83%9D%E3%83%94%E3%83%B3%E3%82%BA">メリー・ポピンズ</a>に例えられていて、Rubyのプログラミングを楽しむというコンセプトが説明されています。僕は知らないのですが、メリー・ポピンズというのはディズニーに出てくるキャラクタで、家事を楽しく効率的に行う乳母という設定のようです。</p>
<h3>1日目</h3>
<p>1日目はRubyの特徴をirbの環境で触りながら説明しています。</p>
<p>まずはその純粋なオブジェクト指向性です。なるほど定数もきっちりオブジェクトなんですね。Javaで言うところのプリミティブ型みたいな、中途半端な要素がなくて綺麗ですね。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">$ irb
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#006666;">4</span>.<span style="color:#9966CC; font-weight:bold;">class</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Fixnum</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>.<span style="color:#9966CC; font-weight:bold;">class</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">TrueClass</span></pre></div></div>

<p>そして後置ifやunlessなど、短く書ける条件分がイイネという話に続いて、動的片付けとダックタイピングについての説明で1日目は終わり。簡単なので練習問題もスキップします。</p>
<h3>2日目</h3>
<p>2日目は配列 => ハッシュ => ブロック => クラス定義と重要な機能を列挙しています。そして最後にMixinの説明があるのですが、恥ずかしながらこの機能を知りませんでした。これはモジュールという単位でメソッドの実装のみを切り出しておいて、必要に応じてクラスに組み込める仕組みのようです。以下のコードが例として上げられていました。ToFileモジュールに実装されているto_fというメソッドを、Personクラスにincludeして組み込んでいます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> ToFile
  <span style="color:#9966CC; font-weight:bold;">def</span> filename
    <span style="color:#996600;">&quot;object_#{self.object_id}.txt&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> to_f
    <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename, <span style="color:#996600;">'w'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> f.<span style="color:#9900CC;">write</span><span style="color:#006600; font-weight:bold;">&#40;</span>to_s<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> Person
  <span style="color:#9966CC; font-weight:bold;">include</span> ToFile
  attr_accessor <span style="color:#ff3333; font-weight:bold;">:name</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>name<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@name</span> = name
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> to_s
    name
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
Person.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'taichino'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_f</span></pre></div></div>

<p>淡々と書きましたが、最初に説明を読んだときは、あぁポリモーフィズムってこれで実装すれば良いんや！と感動しました。C++みたいな多重継承じゃ自由度高すぎるし、Javaみたいなインターフェースじゃ手間増えてるだけやんって言うのが解決されてますね。多重継承できる環境の時は、1つのスーパークラスと複数のモジュールという風に制約をもうけたら同じ事ができるので、これは良かったです。いきなりであれなんですけど、これ知っただけでもうこの本ペイした感じです。</p>
<p>2日目も練習問題は特につまるところはありませんでした。</p>
<h3>3日目</h3>
<p>3日目はRubyでのメタプログラミングをちょっとだけ触ってみようと言う節です。まず最初にオープンクラスについて説明されています。機能名は知らなかったのですが、普段Pythonを書いていてRubyがうらやましくなる１番の機能がこれです。要はクラスの機能を上書きできるという話で、標準クラスライブラリ中のStringだろうがNilClassだろうがおかまいなしに振舞いを変更できます。Objective-Cのカテゴリも似たような事ができますね。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># 文字列クラスにメソッドを追加</span>
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">String</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> blank?
    <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">size</span> == <span style="color:#006666;">0</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>何年か前に、高林哲さんの書かれた<a href="http://0xcc.net/ruby-romkan/">Romkan</a>のコードを読んでいる時に、この機能を上手く使うとドメインが絞れるコードはすごくスッキリするんや！と感銘を受けたのを思い出しました。</p>
<p>オープンクラスに続いて、上述のモジュールを使った例の説明などで3日目は終わりでした。</p>
<p>3日目の練習問題は少し手こずったので張っておきます。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> CsvRow
  attr_accessor :columns, :headers  
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> initialize<span style="color: black;">&#40;</span>row, headers<span style="color: black;">&#41;</span>
    @columns = row.<span style="color: black;">chomp</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span>
    @headers = headers
  end
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> method_missing<span style="color: black;">&#40;</span>name, <span style="color: #66cc66;">*</span>args<span style="color: black;">&#41;</span>
    idx = @headers.<span style="color: black;">index</span><span style="color: black;">&#40;</span>name.<span style="color: black;">to_s</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> nil <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> idx
    <span style="color: #ff7700;font-weight:bold;">return</span> @columns<span style="color: black;">&#91;</span>idx<span style="color: black;">&#93;</span>
  end
end
&nbsp;
module ActsAsCsv
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">self</span>.<span style="color: black;">included</span><span style="color: black;">&#40;</span>klass<span style="color: black;">&#41;</span>
    klass.<span style="color: black;">extend</span> ClassMethods
  end
&nbsp;
  module ClassMethods
    <span style="color: #ff7700;font-weight:bold;">def</span> acts_as_csv
      include InstanceMethods
    end
  end
&nbsp;
  module InstanceMethods
    attr_accessor :headers, :contents
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> read
      @contents = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
      filename = <span style="color: #008000;">self</span>.<span style="color: #ff7700;font-weight:bold;">class</span>.<span style="color: black;">to_s</span>.<span style="color: black;">downcase</span> + <span style="color: #483d8b;">'.txt'</span>
      <span style="color: #008000;">file</span> = File.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span>filename<span style="color: black;">&#41;</span>
      headers = <span style="color: #008000;">file</span>.<span style="color: black;">gets</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span>.<span style="color: #008000;">map</span><span style="color: black;">&#123;</span>|item| item.<span style="color: black;">strip</span> <span style="color: black;">&#125;</span>
      <span style="color: #008000;">file</span>.<span style="color: black;">each</span> <span style="color: black;">&#123;</span>|row|
        @contents <span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&lt;</span> CsvRow.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span>row, headers<span style="color: black;">&#41;</span>
      <span style="color: black;">&#125;</span>
    end
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> each<span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>block<span style="color: black;">&#41;</span>
      @contents.<span style="color: black;">each</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">&amp;</span>block<span style="color: black;">&#41;</span>
    end
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> initialize
      read
    end
  end
end
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> RubyCsv
  include ActsAsCsv
  acts_as_csv
end
&nbsp;
m = RubyCsv.<span style="color: #dc143c;">new</span>
m.<span style="color: black;">each</span> <span style="color: black;">&#123;</span>|row|
  puts row.<span style="color: black;">one</span>
<span style="color: black;">&#125;</span></pre></div></div>

<h3>まとめ</h3>
<p>最後に長所と短所が書かれていて、1行で書くと&#8221;柔軟で書きやすいけど遅いんだよね&#8221;とのことです。そんなん知ってるw<br />
あとWebアプリとも相性が良いとのこと。それも知ってるw あとperlで言うところのcpanモジュールであるgemが充実してるので本来書くべきコードに集中できるぜ！とのこと。確かにgemには色々面白いモジュールがある印象なので、ざっと眺めてみるのも良いかもしれません。</p>
<p>あとOOPの大きな欠点は平行性だと書かれていて、今のところ「？」なのでこの本読み終わるまでに理解できたら良いなぁということろです。改めてRuby触ってるとやっぱり綺麗なので、なんか1個くらいRubyでコード書きたくなってきました。</p>
<p>一応、練習問題で書いたコードは<a href="https://github.com/taichino/7langs_in_7weeks/tree/master/ruby">github</a>に上げています。
</pre>
<p>次はIoです。Rubyと違って何も知らないので、次からが本番ですね。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=creatorsland-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B00007G7SQ" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/2444/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1時間覚えるRubyで入門した</title>
		<link>http://taichino.com/programming/1358</link>
		<comments>http://taichino.com/programming/1358#comments</comments>
		<pubDate>Fri, 11 Dec 2009 14:58:14 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1358</guid>
		<description><![CDATA[rubyは読めた方が良いなぁと思っていたのですが、タイミングが無くてほったらかしでした。で、「1時間で覚えるRuby」という面白そうな記事を見つけたので内容を写経して見ました。結果は45分でこなせて効果もあったのでオススメです。 気付いた事を箇条書きにしておきます。 Integer型の0はTrue扱い irbがpythonで言うところのipython pythonで言うところの辞書は、perl同様ハッシュと呼ぶ メンバ変数には@を付ける クラス変数には@@を付ける to_sでtostring インクリメント演算子はない 正規表現はperlに似てる。置換はsub, gsubを使う ARGFにファイルハンドルが入ってる 知らないオブジェクトはirbのタブ補完機能で補完リストを眺めたらなんとかなる ipythonで言うところの?とか??の機能がirbで見つからない 上記エントリには記述がなかったですが、写経しながら調べた事は以下。 gemがperlで言うところのcpanコマンド。gem helpでコマンド一覧 rubyforgeがperlで言うところのcpan。でも廃止されるらしい。 組み込み型のStringとかIntegerとかでもメソッドを追加(変更？)できる もう少し慣れたら後はリファレンスでなんとかなりそうな雰囲気ではあります。とりあえず最後のワードカウントを自力で書いたら以下のようになりました。 #!/usr/bin/ruby # usage: wc_test.rb file &#160; line_num = 0 dic = &#123;&#125; for line in ARGF line_num += 1 for word in line.split&#40;/\s/&#41; if dic&#91;word&#93; dic&#91;word&#93; += 1 else dic&#91;word&#93;= 1 end end end &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>rubyは読めた方が良いなぁと思っていたのですが、タイミングが無くてほったらかしでした。で、「<a href="http://mayah.jp/article/2004/ruby">1時間で覚えるRuby</a>」という面白そうな記事を見つけたので内容を写経して見ました。結果は45分でこなせて効果もあったのでオススメです。</p>
<p><span id="more-1358"></span></p>
<p>気付いた事を箇条書きにしておきます。</p>
<ul>
<li>Integer型の0はTrue扱い</li>
<li>irbがpythonで言うところのipython</li>
<li>pythonで言うところの辞書は、perl同様ハッシュと呼ぶ</li>
<li>メンバ変数には@を付ける</li>
<li>クラス変数には@@を付ける</li>
<li>to_sでtostring</li>
<li>インクリメント演算子はない</li>
<li>正規表現はperlに似てる。置換はsub, gsubを使う</li>
<li>ARGFにファイルハンドルが入ってる</li>
<li>知らないオブジェクトはirbのタブ補完機能で補完リストを眺めたらなんとかなる</li>
<li>ipythonで言うところの?とか??の機能がirbで見つからない</li>
</ul>
<p>上記エントリには記述がなかったですが、写経しながら調べた事は以下。</p>
<ul>
<li>gemがperlで言うところのcpanコマンド。gem helpでコマンド一覧</li>
<li><a href="http://rubyforge.org/">rubyforge</a>がperlで言うところのcpan。でも廃止されるらしい。</li>
<li>組み込み型のStringとかIntegerとかでもメソッドを追加(変更？)できる</li>
</ul>
<p>もう少し慣れたら後は<a href="http://www.ruby-lang.org/ja/man/html/index.html">リファレンス</a>でなんとかなりそうな雰囲気ではあります。とりあえず最後のワードカウントを自力で書いたら以下のようになりました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span>
<span style="color:#008000; font-style:italic;"># usage: wc_test.rb file</span>
&nbsp;
line_num = <span style="color:#006666;">0</span>
dic = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">for</span> line <span style="color:#9966CC; font-weight:bold;">in</span> ARGF
  line_num <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> word <span style="color:#9966CC; font-weight:bold;">in</span> line.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>\s<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span>
      dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span>= <span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
total = <span style="color:#006666;">0</span>
<span style="color:#9966CC; font-weight:bold;">for</span> k, v <span style="color:#9966CC; font-weight:bold;">in</span> dic.<span style="color:#9900CC;">sort</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>a,b<span style="color:#006600; font-weight:bold;">|</span> a<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> b<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  total <span style="color:#006600; font-weight:bold;">+</span>= v
  <span style="color:#CC0066; font-weight:bold;">printf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%s : %d<span style="color:#000099;">\n</span>&quot;</span>, k, v<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">printf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%d lines, %d kinds, %d words&quot;</span>,
       line_num, dic.<span style="color:#9900CC;">size</span>, total<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>今のところrubyで何か書きたい訳ではなくて、幾つか読みたいソースがあるだけなので、ぼちぼち覚えて行こうと思います。</p>
<p><strong>追記</strong><br />
ついでにirbを少しだけカスタマイズしました。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gem <span style="color: #c20cb9; font-weight: bold;">install</span> what_methods
$ gem <span style="color: #c20cb9; font-weight: bold;">install</span> wirble</pre></div></div>

<p>上記モジュールをインストールした後に~/.irbrcを編集します。これでirbのヒストリが使えたり色がでたりと便利になりました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'activesupport'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'pp'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'irb/completion'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'what_methods'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'wirble'</span>
&nbsp;
IRB.<span style="color:#9900CC;">conf</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:SAVE_HISTORY</span><span style="color:#006600; font-weight:bold;">&#93;</span>=<span style="color:#006666;">1000</span>
Wirble.<span style="color:#9900CC;">init</span>
Wirble.<span style="color:#9900CC;">colorize</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/1358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rrencodeを理解した</title>
		<link>http://taichino.com/programming/1088</link>
		<comments>http://taichino.com/programming/1088#comments</comments>
		<pubDate>Mon, 12 Oct 2009 22:08:59 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rrencode]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1088</guid>
		<description><![CDATA[perlの予約語について検索したら、ppencodeとrrencodeに行き着きました。こんなに愛を感じるプログラムは見た事無かったです。で、ppencodeは解説もあって割とすっと理解できたんですが、rrencodeは理解するのに時間がかかりました。一応メモ書きをば。 出来るだけ簡潔に済ませる為に&#8217;a'と１文字だけ表示させるrrencodeプログラムを見てみます。 $ ./rrencode.rb a #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;;$&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;?!+?!+?!&#41;&#41;%&#40;?&#123;-?;+&#40;?&#93;-?=+?&#34;-?!)));($,&#124;$$&#38;&#38;@@_=$_);$&#62;&#60; &#60;$/ どこから手をつければ良いか途方に暮れそうになりますが、まず手始めに ?c という構文から崩してみます。これは文字からアスキーコードを取得する構文で、この部分はすべて数字に置き換えられます。?cの部分をすべて数字に直してみましょう。 #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;;$&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;33+33+33&#41;&#41;%&#40;123-59+&#40;93-61+34-33&#41;&#41;&#41;;&#40;$,&#124;$$&#38;&#38;@@_=$_&#41;;$&#62;&#60; &#60;$/ まだまだ何の事か全く解りませんね。次に計算できる部分は計算して、セミコロンで改行を入れてみます。 #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;; $&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;99&#41;&#41;%&#40;97&#41;&#41;; &#40;$,&#124;$$&#38;&#38;@@_=$_&#41;; $&#62;&#60; &#60;$/ 何となく希望が湧いて来ました。次に特殊変数を処理します。ここではデフォルトの場合を仮定して以下の置き換えを行っています。リファレンスを見ながらちまちま置き換えましょう。 $,はnil $/は"\n" $$はProcess.pid $>はSTDOUT また、ついでに適宜空白を入れています。 #!/usr/bin/env ruby &#40;nil &#38; nil &#124;&#124; @_=STDOUT&#41;; STDOUT&#60; &#60;&#40;nil &#38; nil &#124;&#124; &#40;%!%!&#60;&#60;&#40;99&#41;&#41;%&#40;97&#41;&#41;; &#40;nil &#124; Process.pid &#38;&#38; @@_=$_&#41;; STDOUT&#60;&#60;&#34;\n&#34; ここまで来ると何となくプログラムの意味を想像できますね。さて、ここで2行目と4行目は単に値を表しているだけで、出力に影響を与えていないので削除します。 #!/usr/bin/env ruby [...]]]></description>
			<content:encoded><![CDATA[<p>perlの予約語について検索したら、<a href="http://www.namazu.org/~takesako/diary/?date=20050831">ppencode</a>と<a href="http://mono.kmc.gr.jp/~oxy/d/?date=20050901">rrencode</a>に行き着きました。こんなに愛を感じるプログラムは見た事無かったです。で、ppencodeは解説もあって割とすっと理解できたんですが、rrencodeは理解するのに時間がかかりました。一応メモ書きをば。</p>
<p><span id="more-1088"></span></p>
<p>出来るだけ簡潔に済ませる為に&#8217;a'と１文字だけ表示させるrrencodeプログラムを見てみます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">$ .<span style="color:#006600; font-weight:bold;">/</span>rrencode.<span style="color:#9900CC;">rb</span> a
<span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>?!<span style="color:#006600; font-weight:bold;">+</span>?!<span style="color:#006600; font-weight:bold;">+</span>?!<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span>?<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">-</span>?;<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#40;</span>?<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">-</span>?=<span style="color:#006600; font-weight:bold;">+</span>?<span style="color:#996600;">&quot;-?!)));($,|$$&amp;&amp;@@_=$_);$&gt;&lt; &lt;$/</span></pre></div></div>

</pre>
<p>どこから手をつければ良いか途方に暮れそうになりますが、まず手始めに ?c という構文から崩してみます。これは<a href="http://www.ruby-lang.org/ja/man/html/Ruby_A4C7BBC8A4EFA4ECA4EBB5ADB9E6A4CEB0D5CCA3.html#a.3f">文字からアスキーコードを取得する構文</a>で、この部分はすべて数字に置き換えられます。?cの部分をすべて数字に直してみましょう。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">123</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">59</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">93</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">61</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">34</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">|</span>$$<span style="color:#006600; font-weight:bold;">&amp;&amp;</span>@@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>$<span style="color:#006600; font-weight:bold;">/</span></pre></div></div>

</pre>
<p>まだまだ何の事か全く解りませんね。次に計算できる部分は計算して、セミコロンで改行を入れてみます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">|</span>$$<span style="color:#006600; font-weight:bold;">&amp;&amp;</span>@@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;
$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>$<span style="color:#006600; font-weight:bold;">/</span></pre></div></div>

</pre>
<p>何となく希望が湧いて来ました。次に特殊変数を処理します。ここではデフォルトの場合を仮定して以下の置き換えを行っています。<a href="http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html">リファレンス</a>を見ながらちまちま置き換えましょう。</p>
<ul>
<li><strong>$,</strong>はnil</li>
<li><strong>$/</strong>は"\n"</li>
<li><strong>$$</strong>はProcess.pid</li>
<li><strong>$></strong>はSTDOUT</li>
</ul>
<p>また、ついでに適宜空白を入れています。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#0066ff; font-weight:bold;">@_</span>=STDOUT<span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC00FF; font-weight:bold;">Process</span>.<span style="color:#9900CC;">pid</span> <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> @@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>ここまで来ると何となくプログラムの意味を想像できますね。さて、ここで2行目と4行目は単に値を表しているだけで、出力に影響を与えていないので削除します。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>２行目をもう少し整理してみましょう。nil &#038; nilはfalseと、false || expressionはexpressionと等価である事を考えて整理します。明らかに冗長な括弧も削除しました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>! <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>後一息です。<a href="http://www.ruby-lang.org/ja/man/html/Ruby_A4C7BBC8A4EFA4ECA4EBB5ADB9E6A4CEB0D5CCA3.html#a.25">%!文字列!はダブルクォート文字列を表している</a>ので%!%!は"%"と等しいです。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%&quot;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>さらに、文字列に対する＜＜演算子は、<a href="http://www.ruby-lang.org/ja/man/html/String.html#self.20.3c.3c.20other">Stringクラスのconcatメソッドのエイリアス</a>なので、concatメソッドで置き換えられます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%&quot;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>concatメソッドは0 ~ 255の値が渡された場合はその値をアスキーコードに持つ文字を文字列に付加します。なので"%".concat(99)は99が'c'を表す事を考えると"%c"に等しくなります。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%c&quot;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>文字列 % argsという構文はStringクラスの<a href="http://www.ruby-lang.org/ja/man/html/String.html#self.20.25.20args">sprintfメソッドのエイリアス</a>なので、sprintfで置き換えます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>sprintf<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%c&quot;</span>, <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>以上で、rrenodeされたプログラムがaと出力される仕組が解りました。複数文字を出力する場合は、sprintf文を文字数分だけ呼び出すようです。なるほど。何となくperlでも出来そうですけどどうなんでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/1088/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

