<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ruby 1.7 feature</title> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <link href="default.css" type="text/css" rel="stylesheet" /> <link href="refm388.html" rel="next" /> <link href="refm386.html" rel="prev" /> <link href="index.html" rel="start" /> </head> <body> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm543.html">INDEX</a>] [<a href="index.html">TOP</a>][<a href="refm385.html">UP</a>][<a href="refm386.html"><-PREV</a>][<a href="refm388.html">NEXT-></a>]</span></div> <hr /> <h1><a name="L006373" id="L006373">ruby 1.7 feature</a></h1> <p>ruby version 1.7 は開発版です。以下にあげる機能は将来削除されたり互換 性のない仕様変更がなされるかもしれません。</p> <h2><a name="L006374" id="L006374">1.7.3 -> 1.8.0 preview1 (2002-12-24)</a></h2> <h3><a name="L006375" id="L006375">2002-12-20</a></h3> <dl> <dt><a name="L006376" id="L006376"><a href="refm258.html">profiler.rb</a> [lib] [new]</a></dt> <dd> <p>追加。<a href="refm255.html">profile.rb</a> の実体として分離されました。</p> </dd> <dt><a name="L006377" id="L006377">rb_define_alloc_func() [api] [new]</a></dt> <dt><a name="L006378" id="L006378">rb_undef_alloc_func() [api] [new]</a></dt> <dd> <p>追加。<a href="refm046.html#L001154">allocate</a> メソッドの定義に使用します。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19116">ruby-dev:19116</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006379" id="L006379">2002-12-18</a></h3> <dl> <dt><a name="L006380" id="L006380"><a href="refm055.html#L001334">Regexp#===</a> [compat]</a></dt> <dd> <p>真偽値を返すようになりました。</p> <pre>p(/foo/ === "foo") => ruby 1.6.8 (2002-12-24) [i586-linux] 0 => ruby 1.8.0 (2003-03-12) [i586-linux] true</pre> </dd> </dl> <h3><a name="L006381" id="L006381">2002-12-17</a></h3> <dl> <dt><a name="L006382" id="L006382">defined? [compat]</a></dt> <dd> <p>属性代入、配列要素への代入に対して "method" でなく "assignment" を返 すようになりました。</p> <pre>class Foo attr_accessor :foo end p defined? Foo.new.foo = 1 ary = [] p defined? ary[2] = 1 => ruby 1.6.8 (2002-12-24) [i586-linux] "method" "method" => ruby 1.8.0 (2003-03-12) [i586-linux] "assignment" "assignment"</pre> </dd> </dl> <h3><a name="L006381" id="L006381">2002-12-17</a></h3> <dl> <dt><a name="L006383" id="L006383"><a href="refm215.html">open-uri.rb</a> [lib] [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006384" id="L006384">2002-12-14</a></h3> <dl> <dt><a name="L006385" id="L006385">WindowsCE [platform]</a></dt> <dd> <p><a href="refm422.html">WindowsCE</a> のサポートパッチが取り込まれました。</p> </dd> </dl> <h3><a name="L006386" id="L006386">2002-12-11</a></h3> <dl> <dt><a name="L006387" id="L006387"><a href="refm040.html#L000901">IO#read</a> [compat]</a></dt> <dt><a name="L006388" id="L006388"><a href="refm040.html#L000952">IO#sysread</a> [compat]</a></dt> <dd> <p>IO#read, IO#sysread に第二引数追加(あらかじめ割り当てた読み込み用バッ ファの指定)</p> </dd> </dl> <h3><a name="L006389" id="L006389">2002-12-10</a></h3> <dl> <dt><a name="L006390" id="L006390"><a href="refm059.html#L001531">Thread#terminate</a> [new]</a></dt> <dd> <p>追加。Thread#kill と同じ。</p> </dd> </dl> <h3><a name="L006391" id="L006391">2002-12-07</a></h3> <dl> <dt><a name="L006392" id="L006392"><a href="refm075.html#L001927">Process.abort</a> [new]</a></dt> <dt><a name="L006393" id="L006393"><a href="refm075.html#L001930">Process.exit</a> [new]</a></dt> <dd> <p>追加。関数 abort, exit と同じ。</p> </dd> </dl> <h3><a name="L006394" id="L006394">2002-12-06</a></h3> <dl> <dt><a name="L006395" id="L006395"><a href="refm053.html#L001290">Process::Status#pid</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006396" id="L006396">2002-12-04</a></h3> <dl> <dt><a name="L006397" id="L006397">Object#copy_object</a></dt> <dd> <p>become から名前変更。(その後 1.8 で initialize_copy という名前になった)</p> </dd> </dl> <h3><a name="L006398" id="L006398">2002-11-27</a></h3> <dl> <dt><a name="L006399" id="L006399"><a href="refm106.html#L002136">SystemExit#initialize</a> [compat]</a></dt> <dd> <p>引数が追加されました。</p> <pre>ruby -e 'raise SystemExit.new(2)' echo $? # => 2</pre> </dd> </dl> <h3><a name="L006400" id="L006400">2002-11-19</a></h3> <dl> <dt><a name="L006401" id="L006401"><a href="refm031.html#L000710">Array#transpose</a> [new]</a></dt> <dd> <p>追加</p> <pre>p [[1,2,3], [4,5,6], [7,8,9]].transpose => ruby 1.7.3 (2002-12-11) [i586-linux] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]</pre> </dd> </dl> <h3><a name="XXINVALIDXX" id="XXINVALIDXX">2002-11-08 </a></h3> <dl> <dt><a name="L006403" id="L006403">[parser] [experimental]</a></dt> <dd> <p>実験的な修正のようです。</p> <pre>a = 1 p a / 5 => ruby 1.6.8 (2002-12-24) [i586-linux] 0 => ruby 1.8.0 (2003-03-12) [i586-linux] 0 a = 1 p a /5 => -:2: warning: ambiguous first argument; make sure -:2: unterminated regexp meets end of file ruby 1.6.8 (2002-12-24) [i586-linux] => ruby 1.8.0 (2003-03-12) [i586-linux] 0</pre> </dd> </dl> <h3><a name="L006404" id="L006404">2002-11-02</a></h3> <dl> <dt><a name="L006405" id="L006405"><a href="refm030.html#L000574">Object#object_id</a> [new]</a></dt> <dd> <p>追加 (Object#id は、obsolete)</p> <pre>p Object.new.id => ruby 1.6.7 (2002-03-01) [i586-linux] 537730140 => -:1: warning: Object#id will be deprecated; use Object#object_id ruby 1.7.3 (2002-12-04) [i586-linux] 537723790</pre> </dd> </dl> <h3><a name="L006404" id="L006404">2002-11-02</a></h3> <dl> <dt><a name="L006406" id="L006406"><a href="refm050.html#L001233">Fixnum#to_sym</a> [new]</a></dt> <dt><a name="L006406" id="L006406"><a href="refm056.html#L001417">String#to_sym</a> [new]</a></dt> <dd> <p>追加(Symbol#intern はなくなった)</p> </dd> </dl> <h3><a name="L006407" id="L006407">2002-11-01</a></h3> <dl> <dt><a name="L006408" id="L006408"><a href="refm065.html#L001673">Array#zip</a> [new]</a></dt> <dt><a name="L006408" id="L006408"><a href="refm065.html#L001673">Enumerable#zip</a> [new]</a></dt> <dd> <p>追加</p> <pre>p [1,2,3].zip([4,5,6], [7,8,9]) => ruby 1.7.3 (2002-12-11) [i586-linux] [[1, 4, 7], [2, 5, 8], [3, 6, 9]] p [1,2,3].zip([4,5,6], [7,8,9]) {|v| p v} => ruby 1.7.3 (2002-12-11) [i586-linux] [1, 4, 7] [2, 5, 8] [3, 6, 9] nil</pre> </dd> </dl> <h3><a name="L006409" id="L006409">2002-10-30</a></h3> <dl> <dt><a name="L006410" id="L006410"><a href="refm045.html#L001118">Module#private_method_defined?</a> [new]</a></dt> <dt><a name="L006411" id="L006411"><a href="refm045.html#L001119">Module#protected_method_defined?</a> [new]</a></dt> <dt><a name="L006412" id="L006412"><a href="refm045.html#L001120">Module#public_method_defined?</a> [new]</a></dt> <dt><a name="L006413" id="L006413"><a href="refm030.html#L000586">Object#methods</a> [change]</a></dt> <dt><a name="L006414" id="L006414"><a href="refm045.html#L001112">Module#instance_methods</a> [change]</a></dt> <dd> <p><a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18606">ruby-dev:18606</a><sup class="outside"><small>[外部]</small></sup></p> <p><a href="refm045.html#L001118">Module#private_method_defined?</a>, <a href="refm045.html#L001119">Module#protected_method_defined?</a>, <a href="refm045.html#L001120">Module#public_method_defined?</a> 追加</p> <p><a href="refm030.html#L000586">Object#methods</a>, <a href="refm045.html#L001112">Module#instance_methods</a> 変更(Module#method_defined? と Module#instance_methods の関係と合うように)</p> <pre>class Foo def public_m; end private def private_m; end protected def protected_m; end end foo = Foo.new m = %w(public_m private_m protected_m) p m.collect {|_| Foo.method_defined?(_)} if Foo.respond_to? :public_method_defined? p m.collect {|_| Foo.public_method_defined?(_)} p m.collect {|_| Foo.private_method_defined?(_)} p m.collect {|_| Foo.protected_method_defined?(_)} end puts '---' p m.collect {|_| Foo.instance_methods.member?(_)} p m.collect {|_| Foo.public_instance_methods.member?(_)} p m.collect {|_| Foo.private_instance_methods.member?(_)} p m.collect {|_| Foo.protected_instance_methods.member?(_)} puts '---' p m.collect {|_| foo.methods.member?(_)} p m.collect {|_| foo.public_methods.member?(_)} p m.collect {|_| foo.private_methods.member?(_)} p m.collect {|_| foo.protected_methods.member?(_)} => ruby 1.6.8 (2002-12-24) [i586-linux] [true, false, true] --- [true, false, false] [true, false, false] [false, true, false] [false, false, true] --- [true, false, false] [true, false, false] [false, true, false] [false, false, true] => ruby 1.8.0 (2003-03-09) [i586-linux] [true, false, true] [true, false, false] [false, true, false] [false, false, true] --- [true, false, true] [true, false, false] [false, true, false] [false, false, true] --- [true, false, true] [true, false, false] [false, true, false] [false, false, true]</pre> </dd> </dl> <h3><a name="L006415" id="L006415">2002-10-23</a></h3> <dl> <dt><a name="L006416" id="L006416">[parser] [new]</a></dt> <dd> <p>シンボルの拡張表記法が採用されました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18537">ruby-dev:18537</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p :"foo#{"bar"}" p :'foo#{"bar"}' p %s{foo#{"bar"}} => ruby 1.7.3 (2002-11-14) [i586-linux] :foobar :"foo\#{\"bar\"}" :"foo\#{\"bar\"}"</pre> </dd> </dl> <h3><a name="L006417" id="L006417">2002-10-11</a></h3> <dl> <dt><a name="L006418" id="L006418">rescue修飾式 [parser] [change]</a></dt> <dd> <p>rescue 修飾式の優先度が変わりました。これは、実験的なもののようです。 (1.8 リリースで残っているので正式採用のようです)</p> <pre>a = b rescue c</pre> <p>は、</p> <pre>(a = b) rescue c</pre> <p>でなく</p> <pre>a = (b rescue c)</pre> <p>と評価されます。if 修飾式などと比べて優先度が異なってしまいますが、b が例外を起こしたときの値として、c を利用できるという利点があります。</p> <pre># 以下の実行結果では、以前の仕様(1.6 の結果)では代入が起こらず # 変数が定義されるだけとなり、結果 v は nil になっています。 v = raise rescue true p v => ruby 1.6.7 (2002-03-01) [i586-linux] nil => ruby 1.7.3 (2002-10-18) [i586-linux] true</pre> </dd> </dl> <h3><a name="L006419" id="L006419">2002-10-02</a></h3> <dl> <dt><a name="L006420" id="L006420"><a href="refm030.html#L000562">Object#type</a> [obsolete]</a></dt> <dd> <p>使うと警告が出るようになりました。代わりに Object#class を使用してく ださい。</p> <pre>p Object.new.type => -:1: warning: Object#type is deprecated; use Object#class ruby 1.7.3 (2002-10-08) [i586-linux] Object</pre> </dd> </dl> <h3><a name="L006421" id="L006421">2002-09-27</a></h3> <dl> <dt><a name="L006422" id="L006422"><a href="refm046.html#L001158">Class#inherited</a> [change]</a></dt> <dd> <p>inherited メソッドはクラス定義式の終りに呼び出されるようになりました。 <em class="XXINVALIDXX">ruby-bugs-ja:342</em></p> <pre>def Object.inherited(c) p "inherited!" end class Foo p "defining Foo" end => ruby 1.6.7 (2002-03-01) [i586-linux] "inherited!" "defining Foo" => ruby 1.7.3 (2002-10-04) [i586-linux] "defining Foo" "inherited!"</pre> </dd> </dl> <h3><a name="L006423" id="L006423">2002-09-26</a></h3> <dl> <dt><a name="L006424" id="L006424">[parser] [compat]</a></dt> <dd> <p>メソッド定義の外での return の呼び出しはコンパイル時でなく実行時に エラーになるようになりました。</p> <pre>p :doing return => -:2: return appeared outside of method ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-10-04) [i586-linux] :doing -:2: unexpected return</pre> </dd> </dl> <h3><a name="L006425" id="L006425">2002-09-13</a></h3> <dl> <dt><a name="L006426" id="L006426"><a href="refm020.html">||=</a> [bug]</a></dt> <dd> <p>未定義の変数に対して ||= で値を代入したときに、グローバル変数で警告 が出ていました。また、クラス変数はエラーになっていました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18278">ruby-dev:18278</a><sup class="outside"><small>[外部]</small></sup></p> <pre>local ||= 1 @instance ||= 1 $global ||= 1 @@class ||= 1 => -:3: warning: global variable `$global' not initialized -:4: uninitialized class variable @@class in Object (NameError) ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-13) [i586-linux]</pre> </dd> </dl> <h3><a name="L006427" id="L006427">2002-09-11</a></h3> <dl> <dt><a name="L006428" id="L006428"><a href="refm075.html#L001948">Process.pid</a> (win) [change]</a></dt> <dd> <p>mswin32 版と mingw32 版で、ruby 内部はプロセスIDを常に正の値に変換して 扱うようになりました。 NT系のOSでは従来と違いはありませんが、Win9x系のOSでは、OSの保持する プロセスIDが負値なので、符号変換して扱うようになります。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18263">ruby-dev:18263</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006427" id="L006427">2002-09-11</a></h3> <dl> <dt><a name="L006429" id="L006429">IO#read, gets ..., etc. [bug]</a></dt> <dd> <p>File::NONBLOCK を指定した IO の読み込みで EWOULDBLOCK が発生すると、 途中まで読んだデータが失われることがありました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17855">ruby-dev:17855</a><sup class="outside"><small>[外部]</small></sup></p> <p>Thread を使ったプログラムで、ファイルからデータを読み込んでソケットに 書き出していると、ごく稀に Socket#write が Errno::EINTR になってしまう ことがありました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17878">ruby-dev:17878</a><sup class="outside"><small>[外部]</small></sup>, <em class="XXINVALIDXX">ruby-core:00444</em></p> </dd> </dl> <h3><a name="L006430" id="L006430">2002-09-05</a></h3> <dl> <dt><a name="L006431" id="L006431"><a href="refm071.html#L001863">Marshal.dump</a> [marshal] [change]</a></dt> <dd> <p>無名モジュールを include したオブジェクトがダンプできなくなりました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18186">ruby-dev:18186</a><sup class="outside"><small>[外部]</small></sup></p> <pre>class << obj = Object.new include Module.new end Marshal.dump(obj) => ruby 1.6.7 (2002-03-01) [i586-linux] => -:4:in `dump': can't dump anonymous class #<Module:0x401a871c> (ArgumentError) from -:4 ruby 1.7.3 (2002-09-06) [i586-linux]</pre> <p>名前付きモジュールを include したオブジェクトはダンプでき、include したモジュールの情報をダンプフォーマットに保持するようになりました。</p> <pre>module M def foo p :foo end end class << obj = Object.new include M end p dump = Marshal.dump(obj) p obj2 = Marshal.load(dump) class << obj2 p included_modules end obj2.foo => ruby 1.6.7 (2002-03-01) [i586-linux] "\004\006o:\vObject\000" #<Object:0x401a9630> [Kernel] -:14: undefined method `foo' for #<Object:0x401a9630> (NameError) => ruby 1.7.3 (2002-09-06) [i586-linux] "\004\ae:\006Mo:\vObject\000" #<Object:0x401a821c> [M, Kernel] :foo</pre> <p>これらの変更によりフォーマットバージョンが 4.7 から 4.8 に上がりました。 (2002-09-17)</p> </dd> </dl> <h3><a name="L006432" id="L006432">2002-09-03</a></h3> <dl> <dt><a name="L006433" id="L006433"><a href="refm198.html">mkmf.rb</a>, extmk.rb [lib] [compat]</a></dt> <dd> <p>extmk.rb と mkmf.rb をマージする作業が開始されました。extmk.rb は mkmf.rb を利用するようになりました。mkmf.rb もこれに伴い変更が行われ ています。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18109">ruby-dev:18109</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006434" id="L006434">2002-08-31</a></h3> <dl> <dt><a name="L006435" id="L006435">ruby interpreter [ruby] [change]</a></dt> <dd> <p>クラスの特異クラスの特異クラスは特異クラス自身であると定義されました <em class="XXINVALIDXX">ruby-bugs-ja:313</em>。なんだかよくわかりません(^^;</p> <pre>class << Object p [self.id, self] class << self p [self.id, self] end end => ruby 1.6.7 (2002-03-01) [i586-linux] [537771634, Class] [537742484, Class] => ruby 1.7.3 (2002-09-05) [i586-linux] [537771634, #<Class:Object>] [537771634, #<Class:Object>]</pre> <p>さらに、オブジェクトの特異クラスのスーパークラスの特異クラスと オブジェクトの特異クラスの特異クラスのスーパークラスは同じなのだそうです <em class="XXINVALIDXX">ruby-bugs-ja:324</em>。さあっぱりわかりません(^^;;</p> <pre>class << Object.new class << self.superclass p [self.id, self] end class << self p [self.superclass.id, self.superclass] end end => ruby 1.6.7 (2002-03-01) [i586-linux] [537771634, Class] [537771644, Class] => ruby 1.7.3 (2002-09-05) [i586-linux] [537771634, #<Class:Object>] [537771634, #<Class:Object>]</pre> <p><em class="XXINVALIDXX">ruby-bugs-ja:336</em> のあたりでまた少し変わったかもしれません (2002-09-21 の ChangeLog 参照。まじめにおっかけるのに疲れたらしい ^^;;)</p> </dd> </dl> <h3><a name="L006436" id="L006436">2002-08-30</a></h3> <dl> <dt><a name="L006437" id="L006437"><a href="refm280.html">set.rb</a> [lib] [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006438" id="L006438">2002-08-27</a></h3> <dl> <dt><a name="L006439" id="L006439">Object#become</a></dt> <dd> <p>追加(その後 copy_object という名前になった。その後 initialize_copy という名前になった)</p> <pre>ary = [1,2,3] p ary, ary.id ary.become [3,2,1] p ary, ary.id => ruby 1.7.3 (2002-08-30) [i586-linux] [1, 2, 3] 537743354 [3, 2, 1] 537743354 ary = [1,2,3] p ary, ary.id ary.replace [3,2,1] p ary, ary.id => ruby 1.7.3 (2002-08-30) [i586-linux] [1, 2, 3] 537743354 [3, 2, 1] 537743354 obj = Object.new p obj, obj.id obj.become Object.new p obj, obj.id => ruby 1.7.3 (2002-08-30) [i586-linux] #<Object:0x401a9ff4> 537743354 #<Object:0x401a9ff4> 537743354</pre> </dd> </dl> <h3><a name="L006440" id="L006440">2002-08-23</a></h3> <dl> <dt><a name="L006441" id="L006441">ruby interpreter (win32, MinGW) [ruby] [change]</a></dt> <dd> <p><a href="refm403.html">mswin32</a>版 ruby と <a href="refm404.html">MinGW</a>版 ruby で拡張ライブラリのバイナ リ互換を保つようになりました。Config::CONFIG['RUBY_SO_NAME'] が msvcrt-ruby<var>XX</var> に(DLL 名になります)、Config::CONFIG['sitearch'] (拡張 ライブラリの置き場所のパス要素)が "i386-msvcrt" に変更されました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17144">ruby-dev:17144</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18047">ruby-dev:18047</a><sup class="outside"><small>[外部]</small></sup></p> <p>sitearch は、今回の件で新規追加されました(他の環境では CONFIG['arch'] と同じ)</p> <p><a href="refm401.html">Win32ネイティブ版</a> の脚注も参照</p> </dd> </dl> <h3><a name="L006442" id="L006442">2002-08-20</a></h3> <dl> <dt><a name="L006443" id="L006443"><a href="refm040.html#L000937">IO#putc</a> [compat]</a></dt> <dd> <p>出力メソッドのうち putc だけが write メソッドを使用していませんでした。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18038">ruby-dev:18038</a><sup class="outside"><small>[外部]</small></sup></p> <pre>class << foo = STDOUT.dup def write(s) p "foo" end end foo.putc("bar") puts => ruby 1.6.7 (2002-03-01) [i586-linux] b => ruby 1.7.3 (2002-09-05) [i586-linux] "foo"</pre> </dd> </dl> <h3><a name="L006444" id="L006444">2002-08-13</a></h3> <dl> <dt><a name="L006445" id="L006445"><a href="refm039.html#L000849">Hash#default_proc</a> [new]</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17966">ruby-dev:17966</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006446" id="L006446">2002-08-11</a></h3> <dl> <dt><a name="L006447" id="L006447"><a href="refm052.html#L001283">Proc#to_s</a> [compat]</a></dt> <dd> <p>Proc#to_s の結果にスクリプトのソースファイル名と行番号が付加されまし た。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17968">ruby-dev:17968</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p Proc.new { 2 3 }.to_s => -:2: warning: useless use of a literal in void context ruby 1.6.7 (2002-03-01) [i586-linux] "#<Proc:0x401ab8b8>" => -:2: warning: useless use of a literal in void context ruby 1.7.3 (2002-09-05) [i586-linux] "#<Proc:0x0x401a87d0@-:2>"</pre> </dd> </dl> <h3><a name="L006448" id="L006448">2002-08-01</a></h3> <dl> <dt><a name="L006449" id="L006449"><a href="refm065.html#L001651">Enumerable#find</a> [change]</a></dt> <dd> <p>引数に文字列を指定できなくなりました。</p> <pre>[1,2,3].find("p :nothing") {|v| v > 5} => ruby 1.6.7 (2002-03-01) [i586-linux] :nothing => -:1:in `find': undefined method `call' for "p :nothing":String (NoMethodError) from -:1 ruby 1.7.2 (2002-08-01) [i586-linux]</pre> <p>また、要素が見つからなかった場合は、ifnone の結果を返すようになりました。</p> <pre>p [1,2,3].find(proc {:nothing}) {|v| v > 5} => ruby 1.6.7 (2002-03-01) [i586-linux] nil => ruby 1.7.2 (2002-08-01) [i586-linux] :nothing</pre> </dd> </dl> <h3><a name="L006450" id="L006450">2002-07-27</a></h3> <dl> <dt><a name="L006451" id="L006451"><a href="refm047.html#L001180">Numeric#to_int</a> [new]</a></dt> <dt><a name="L006451" id="L006451"><a href="refm047.html#L001180">Float#to_int</a> [new]</a></dt> <dd> <p>追加。</p> </dd> </dl> <h3><a name="L006452" id="L006452">2002-07-26</a></h3> <dl> <dt><a name="L006453" id="L006453"><a href="refm024.html#L000393">rand</a> [compat]</a></dt> <dd> <p>乱数生成のアルゴリズムに <a href="http://www.math.keio.ac.jp/~matumoto/mt.html">Mersenne Twister</a><sup class="outside"><small>[外部]</small></sup> を使用するようになりました。</p> </dd> </dl> <h3><a name="L006454" id="L006454">2002-07-24</a></h3> <dl> <dt><a name="L006424" id="L006424">[parser] [compat]</a></dt> <dd> <p>ネストしたメソッド定義が許されるようになりました。</p> <pre>def func1 def func2 p :func2 end end func1 func2 => -:2: nested method definition ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-05) [i586-linux] :func2</pre> <p>メソッド定義中での alias, undef も許可されました。</p> <pre>def bar end def foo p :foo undef bar end foo def bar p :bar alias foo bar end bar foo => -:5: undef within method -:12: alias within method ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-05) [i586-linux] :foo -:10: warning: method redefined; discarding old bar -:10: warning: overriding global function `bar' :bar :bar</pre> <p>メソッド定義の外での super の呼び出しはコンパイル時でなく実行時に エラーになるようになりました。</p> <pre>p 1 super => -:2: super called outside of method ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-05) [i586-linux] 1 -:2: super called outside of method (NoMethodError)</pre> <p>おそらく、<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16969">ruby-dev:16969</a><sup class="outside"><small>[外部]</small></sup> あたりが変更の理由なのではないかと思 います。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17882">ruby-dev:17882</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006455" id="L006455">2002-07-19</a></h3> <dl> <dt><a name="L006456" id="L006456"><a href="refm019.html#L000240">数値リテラル</a> [compat]</a></dt> <dd> <p>10進<em>整数</em>リテラルの prefix として 0d が追加されました。</p> <pre>p 0d10 => ruby 1.7.3 (2002-09-04) [i586-linux] 10 p 0d10.1 => -:1: parse error ruby 1.7.3 (2002-09-04) [i586-linux]</pre> <p>大文字も許されます。</p> <pre>p 0D10 => ruby 1.7.3 (2002-09-04) [i586-linux] 10</pre> <p>以下のようなことはできないようです。</p> <pre>p(/\d10/) p "\d10" => ruby 1.7.3 (2002-09-04) [i586-linux] /\d10/ "d10"</pre> <p>リテラルで許されることは Integer() でも許されます。</p> <pre>p Integer("0d010") => ruby 1.7.3 (2002-09-04) [i586-linux] 10 p Integer("0d010.1") => -:1:in `Integer': invalid value for Integer: "0d010.1" (ArgumentError) from -:1 ruby 1.7.3 (2002-09-04) [i586-linux]</pre> <p>String#to_i、String#oct も</p> <pre>p "0d010".to_i p "0d010".oct => ruby 1.6.7 (2002-03-01) [i586-linux] 0 0 => ruby 1.7.3 (2002-09-04) [i586-linux] 10 10</pre> </dd> </dl> <h3><a name="L006457" id="L006457">2002-07-18</a></h3> <dl> <dt><a name="L006458" id="L006458"><a href="refm202.html">net/ftp.rb</a> [new]</a></dt> <dd> <p>メソッド set_socket 追加</p> </dd> </dl> <h3><a name="L006459" id="L006459">2002-07-17</a></h3> <dl> <dt><a name="L006456" id="L006456"><a href="refm019.html#L000240">数値リテラル</a> [compat]</a></dt> <dd> <p>8進リテラルの prefix として 0 以外に 0o が追加されました。</p> <pre>p 0o377 => ruby 1.7.3 (2002-09-04) [i586-linux] 255</pre> <p>大文字も許されます。</p> <pre>p 0O377 => ruby 1.7.3 (2002-09-04) [i586-linux] 255</pre> <p>以下のようなことはできないようです。</p> <pre>p(/\o377/) p "\o377" => ruby 1.7.3 (2002-09-04) [i586-linux] /\o377/ "o377"</pre> <p>リテラルで許されることは Integer() でも許されます。</p> <pre>p Integer("0o377") => -:1:in `Integer': invalid value for Integer: "0o377" (ArgumentError) from -:1 ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-04) [i586-linux] 255</pre> <p>String#to_i、String#oct も</p> <pre>p "0o377".oct p "0o377".to_i(8) => ruby 1.6.7 (2002-03-01) [i586-linux] 0 -:2:in `to_i': wrong # of arguments(1 for 0) (ArgumentError) from -:2 => ruby 1.7.3 (2002-09-04) [i586-linux] 255 255</pre> </dd> </dl> <h3><a name="L006460" id="L006460">2002-07-11</a></h3> <dl> <dt><a name="L006461" id="L006461"><a href="refm056.html#L001431">String#scan</a> [change]</a></dt> <dt><a name="L006462" id="L006462"><a href="refm056.html#L001443">String#split</a> [change]</a></dt> <dt><a name="L006463" id="L006463"><a href="refm056.html#L001452">String#sub</a>, <a href="refm056.html#L001453">String#sub!</a> [change]</a></dt> <dt><a name="L006464" id="L006464"><a href="refm056.html#L001408">String#gsub</a>, <a href="refm056.html#L001409">String#gsub!</a> [change]</a></dt> <dt><a name="L006465" id="L006465"><a href="refm056.html#L001365">String#~</a> [change]</a></dt> <dt><a name="L006466" id="L006466"><em class="XXINVALIDXX">String#=~</em> [change]</a></dt> <dd> <p>pattern として正規表現でなく文字列を指定したとき、それを正規表現にコ ンパイルせず文字列そのものをパターンとして扱うようになりました。(よ り正確には、Regexp.compile(arg) でなく Regexp.compile(Regexp.quote(arg)) するようになりました)</p> <p>str =~ arg だけは、arg が文字列のとき、 Regexp.compile(Regexp.quote(arg)) =~ str と等価な str.index(arg) が 実行されます(したがって、$~ は設定されません)。</p> <pre>p "aaaa*".scan("a*") => ruby 1.6.7 (2002-03-01) [i586-linux] ["aaaa", "", ""] => -:1: warning: string pattern instead of regexp; metacharacters no longer effective ruby 1.7.3 (2002-09-04) [i586-linux] ["a*"] p "aa*aa*aa*".split("a*") => ruby 1.6.7 (2002-03-01) [i586-linux] ["", "*", "*", "*"] => -:1: warning: string pattern instead of regexp; metacharacters no longer effective ruby 1.7.3 (2002-09-04) [i586-linux] ["a", "a", "a"] p "aa*".sub('a*', '') => ruby 1.6.7 (2002-03-01) [i586-linux] "*" => -:1: warning: string pattern instead of regexp; metacharacters no longer effective ruby 1.7.3 (2002-09-04) [i586-linux] "a" p "aa*aa*aa*aa*".gsub('a*', '') => ruby 1.6.7 (2002-03-01) [i586-linux] "****" => -:1: warning: string pattern instead of regexp; metacharacters no longer effective ruby 1.7.3 (2002-09-04) [i586-linux] "aaaa" $_ = "aa*" p ~"a*" => ruby 1.6.7 (2002-03-01) [i586-linux] 0 => ruby 1.7.3 (2002-09-04) [i586-linux] 1</pre> </dd> </dl> <h3><a name="L006467" id="L006467">2002-07-03</a></h3> <dl> <dt><a name="L006468" id="L006468"><a href="refm202.html">net/ftp.rb</a> [compat]</a></dt> <dd> <p>getbinaryfile() の第二引数(ローカルファイル名)が省略可能になりました。 メソッド get(), put(), binary(), binary = 追加</p> </dd> </dl> <h3><a name="L006469" id="L006469">2002-06-29</a></h3> <dl> <dt><a name="L006470" id="L006470">双方向パイプ (win) [compat]</a></dt> <dd> <p>Win32用の双方向パイプサポートのパッチが取り込まれたのだそうです <em class="XXINVALIDXX">ruby-win32:185</em></p> </dd> </dl> <h3><a name="L006471" id="L006471">2002-06-26</a></h3> <dl> <dt><a name="L006472" id="L006472"><a href="refm030.html#L000604">Object#to_a</a> [obsolete]</a></dt> <dd> <p>警告メッセージが出るようになりました。(<a href="refm393.html">obsolete</a> になるのだそうです)</p> <pre>p Object.new.to_a => ruby 1.6.7 (2002-03-01) [i586-linux] [#<Object:0x401ab8b8>] => -:1: warning: default `to_a' will be obsolete ruby 1.7.3 (2002-09-02) [i586-linux] [#<Object:0x401a88ac>]</pre> </dd> </dl> <h3><a name="L006471" id="L006471">2002-06-26</a></h3> <dl> <dt><a name="L006473" id="L006473"><a href="refm024.html#L000343">Array</a>() [change]</a></dt> <dd> <p>Array() は、引数に nil を受け付けなくなりました。 (ruby 1.8.0 (2003-05-29) あたりで、また受け付けるようになりました)</p> <pre>p Array(nil) => ruby 1.6.7 (2002-03-01) [i586-linux] [] => -:1:in `Array': cannot convert nil into Array (TypeError) from -:1 ruby 1.7.3 (2002-09-02) [i586-linux] => ruby 1.8.0 (2003-05-29) [i586-linux] []</pre> </dd> </dl> <h3><a name="L006471" id="L006471">2002-06-26</a></h3> <dl> <dt><a name="L006474" id="L006474"><a href="refm019.html#L000283">%W()</a> [parser]</a></dt> <dd> <p>%W(...) 配列リテラルが追加されました。%w() と異なりバックスラッシュ 記法や式展開が有効です。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15988">ruby-dev:15988</a><sup class="outside"><small>[外部]</small></sup></p> <pre>v = "b c" p %W(a #{v}d\se) => ruby 1.7.3 (2002-09-04) [i586-linux] ["a", "b cd e"]</pre> </dd> </dl> <h3><a name="L006475" id="L006475">2002-06-25</a></h3> <dl> <dt><a name="L006476" id="L006476"><a href="refm024.html#L000345">Integer</a>() [change]</a></dt> <dd> <p>数値や文字列以外のオブジェクトを整数に変換するときに to_i ではなく to_int を使用するようになりました。</p> <pre>class << obj = Object.new def to_i() 0 end def to_int() 1 end end p Integer(obj) => ruby 1.6.7 (2002-03-01) [i586-linux] 0 => ruby 1.7.3 (2002-09-02) [i586-linux] 1</pre> </dd> </dl> <h3><a name="L006475" id="L006475">2002-06-25</a></h3> <dl> <dt><a name="L006477" id="L006477"><a href="refm063.html#L001629">NilClass#to_f</a> [new]</a></dt> <dd> <p>追加</p> <pre>p nil.to_f => -:1: undefined method `to_f' for nil (NameError) ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-02) [i586-linux] 0.0</pre> </dd> </dl> <h3><a name="L006475" id="L006475">2002-06-25</a></h3> <dl> <dt><a name="L006478" id="L006478"><a href="refm024.html#L000344">Float</a>() [change]</a></dt> <dd> <p>Float() は、引数に nil を受け付けなくなりました。</p> <pre>p Float(nil) => ruby 1.6.7 (2002-03-01) [i586-linux] 0.0 => -:1:in `Float': cannot convert nil into Float (TypeError) from -:1 ruby 1.7.3 (2002-09-02) [i586-linux]</pre> </dd> </dl> <h3><a name="L006479" id="L006479">2002-06-24</a></h3> <dl> <dt><a name="L006480" id="L006480"><a href="refm019.html#L000271">式展開</a> [parser]</a></dt> <dd> <p>#{ ... } の式展開中に文字列のデリミタを含めて任意の ruby プログラム をそのまま書けるようになりました。以前も同じでしたが、よりルールが明 確になっているようです。つまり、式展開の中も外も同じ規則で、ruby プ ログラムはパースされます。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17422">ruby-dev:17422</a><sup class="outside"><small>[外部]</small></sup></p> <p>(1.6 は、一時、逆の挙動でした)</p> <pre>p "#{ "foo" }" => ruby 1.6.7 (2002-03-01) [i586-linux] "foo" => -:1: warning: bad substitution in string -:1: parse error p "#{ "foo" }" ^ ruby 1.6.7 (2002-08-21) [i586-linux] => ruby 1.6.8 (2002-12-24) [i586-linux] "foo" => ruby 1.7.3 (2002-09-02) [i586-linux] "foo"</pre> <p>以下のようなデリミタのエスケープはむしろ行うべきではありません。</p> <pre>p "#{ \"foo\" }" => ruby 1.6.7 (2002-03-01) [i586-linux] "foo" => ruby 1.6.7 (2002-08-21) [i586-linux] "foo" => -:1: warning: escaped terminator '"' inside string interpolation ruby 1.7.3 (2002-09-02) [i586-linux] "foo"</pre> <p>式展開中のコメントは、 # から } までではなく # から改行までであるこ とに注意する必要があります。</p> <pre>p "#{ "foo" # comment }" => ruby 1.6.7 (2002-03-01) [i586-linux] "foo" => -:1: parse error ruby 1.7.3 (2002-09-02) [i586-linux] p "#{ "foo" # comment }" => ruby 1.6.7 (2002-03-01) [i586-linux] "foo" => ruby 1.7.3 (2002-09-02) [i586-linux] "foo"</pre> </dd> </dl> <h3><a name="L006481" id="L006481">2002-06-21</a></h3> <dl> <dt><a name="L006424" id="L006424">[parser] [compat]</a></dt> <dd> <p>文字列リテラル中の行頭の __END__ は、スクリプトの終りとみなさなくな りました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17513">ruby-dev:17513</a><sup class="outside"><small>[外部]</small></sup></p> <pre># p " #__END__ #" p eval(%Q(p "\n__END__\n")) => -:1: compile error (SyntaxError) (eval):1: unterminated string meets end of file ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.3 (2002-09-02) [i586-linux] "\n__END__\n" nil</pre> </dd> </dl> <h3><a name="L006482" id="L006482">2002-06-15</a></h3> <dl> <dt><a name="L006483" id="L006483"><a href="refm019.html#L000240">?<whitespace></a> [parser] [change]</a></dt> <dd> <p>?スペース、?改行、?TAB 等はリテラルとして無効になりました。必要なら ?\s, ?\n, ?\t 等を使用してください。(以下の例は前者がダブルクォート を使用していることに注意) <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=261">ruby-bugs-ja:PR#261</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17446">ruby-dev:17446</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p eval("?\t") p eval("?\n") p eval("?\v") p eval("?\f") p eval("?\r") p eval("? ") => ruby 1.6.7 (2002-03-01) [i586-linux] 9 10 11 12 13 32 => -:1: compile error (SyntaxError) (eval):1: parse error ruby 1.7.3 (2002-09-02) [i586-linux] p eval('?\t') p eval('?\n') p eval('?\v') p eval('?\f') p eval('?\r') p eval('?\s') => ruby 1.6.7 (2002-03-01) [i586-linux] 9 10 11 12 13 32 => ruby 1.7.3 (2002-09-02) [i586-linux] 9 10 11 12 13 32</pre> </dd> </dl> <h3><a name="L006484" id="L006484">2002-06-11</a></h3> <dl> <dt><a name="L006485" id="L006485">Borland C++ サポート [platform]</a></dt> <dd> <p>bcc で ruby インタプリタをコンパイルするためのパッチがマージされまし た。</p> </dd> </dl> <h3><a name="L006486" id="L006486">2002-06-04</a></h3> <dl> <dt><a name="L006487" id="L006487"><em class="XXINVALIDXX">Range#max</em> [change]</a></dt> <dt><a name="L006488" id="L006488"><em class="XXINVALIDXX">Range#min</em> [change]</a></dt> <dt><a name="L006489" id="L006489"><a href="refm054.html#L001311">Range#include?</a> [change]</a></dt> <dt><a name="L006490" id="L006490"><em class="XXINVALIDXX">Range#member?</em> [change]</a></dt> <dd> <p>Range#max, Range#min, Range#include? が <=> メソッドによる範囲演算で 求められるようになりました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/35253">ruby-list:35253</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17228">ruby-dev:17228</a><sup class="outside"><small>[外部]</small></sup> (2003-03-18: min, max は元に戻りました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19837">ruby-dev:19837</a><sup class="outside"><small>[外部]</small></sup>)</p> <p>Range#member? は each を利用して全要素を参照し、実際にメンバが存在するか 確認します。(Enumerable#member? と同じ)</p> <p>1.6 までは、max, min, member? include? は、Enumerable のメソッドで、 === は、Range のメソッドです。1.7 では、max, min, member?, include?, === はすべて Range のメソッドで、include? は === の別名になっていま す。(1.8 では、max, min は、Enumerable のメソッドに戻っています)</p> <p>これらの変更により以下のような挙動の違いがあります。</p> <pre>p((0.1 .. 2.0).include?(1.1)) => ruby 1.6.7 (2002-03-01) [i586-linux] false => ruby 1.7.3 (2002-09-02) [i586-linux] true p((0.1 .. 2.0).member?(1.0)) => ruby 1.6.7 (2002-03-01) [i586-linux] true => -:1:in `member?': cannot iterate from Float (TypeError) from -:1 ruby 1.7.3 (2002-09-02) [i586-linux] p "b" < "ba" p(("a"..."bc").max) => ruby 1.6.7 (2002-03-01) [i586-linux] true "b" => ruby 1.7.3 (2002-09-05) [i586-linux] true "bc" => ruby 1.8.0 (2003-03-20) [i586-linux] true "b"</pre> </dd> </dl> <h3><a name="L006491" id="L006491">2002-06-01</a></h3> <dl> <dt><a name="L006492" id="L006492"><a href="refm367.html">win32ole.so</a> [lib] [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006493" id="L006493">2002-05-30</a></h3> <dl> <dt><a name="L006494" id="L006494"><a href="refm054.html#L001314">Range#each</a> [change]</a></dt> <dd> <p>Range#each は各要素の succ メソッドを使用してイテレーションするよう になりました。</p> <pre>(1.0 .. 2.0).each {|v| p v} => ruby 1.6.7 (2002-03-01) [i586-linux] 1 2 => -:1:in `each': cannot iterate from Float (TypeError) from -:1 ruby 1.7.3 (2002-09-02) [i586-linux] class Float def succ self + 1.0 end end (1.0 .. 2.0).each {|v| p v} => ruby 1.7.3 (2002-09-02) [i586-linux] 1.0 2.0</pre> </dd> </dl> <h3><a name="L006493" id="L006493">2002-05-30</a></h3> <dl> <dt><a name="L006495" id="L006495"><a href="refm054.html#L001319">Range#size</a> [obsolete]</a></dt> <dt><a name="L006496" id="L006496"><a href="refm054.html#L001318">Range#length</a> [obsolete]</a></dt> <dd> <p>このメソッドはなくなりました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/64479">ruby-talk:64479</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/72133">ruby-talk:72133</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p(("a".."z").size) => ruby 1.6.7 (2002-03-01) [i586-linux] 26 => -:1: undefined method `size' for #<Range:0x401aa780> (NoMethodError) ruby 1.7.2 (2002-08-01) [i586-linux]</pre> <p>Range の要素数を得るには</p> <pre>p(("a".."z").to_a.size) => ruby 1.7.2 (2002-08-01) [i586-linux] 26</pre> <p>などとする必要があります。</p> </dd> </dl> <h3><a name="L006497" id="L006497">2002-05-29</a></h3> <dl> <dt><a name="L006498" id="L006498"><a href="refm052.html#L001281">Proc#binding</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006499" id="L006499">2002-05-28</a></h3> <dl> <dt><a name="L006500" id="L006500"><a href="refm019.html#L000240">負の数値リテラル</a></a></dt> <dd> <p><em>2003-01-21: この変更は元に戻ったようです</em></p> <p>-数値 のリテラルの字句解析部分が変わって、-数値は、常に一つのリテラ ルとして扱われるようになったようです(この文、予想で書いてます)。</p> <p>例えば、以下の式で結果が異なります。</p> <pre>p -2**2 => -:1: warning: ambiguous first argument; make sure ruby 1.6.7 (2002-03-01) [i586-linux] -4 => -:1: warning: ambiguous first argument; make sure ruby 1.7.2 (2002-08-01) [i586-linux] 4 => -:1: warning: ambiguous first argument; make sure ruby 1.8.0 (2003-03-12) [i586-linux] -4</pre> <p>以前は、-2**2 は、-(2**2) でした。これは演算子の優先順位によります (ホント?)。1.7 では、(-2)**2 となります。また、以下のように - と数 値の間に空白をいれると - は単項演算子(メソッド)として振舞います。(こ れは以前と同じ)</p> <pre>p(- 2**2) => ruby 1.6.7 (2002-03-01) [i586-linux] -4 => ruby 1.7.2 (2002-08-01) [i586-linux] -4 => ruby 1.8.0 (2003-03-12) [i586-linux] -4 class Fixnum def -@ 1 end end p(- 2**2) => -:2: warning: discarding old -@ ruby 1.6.7 (2002-03-01) [i586-linux] 1 => -:2: warning: method redefined; discarding old -@ ruby 1.7.2 (2002-08-01) [i586-linux] 1 => -:2: warning: method redefined; discarding old -@ ruby 1.8.0 (2003-03-12) [i586-linux] 1</pre> </dd> </dl> <h3><a name="L006501" id="L006501">2002-05-23</a></h3> <dl> <dt><a name="L006502" id="L006502"><a href="refm040.html#L000904">IO.sysopen</a> [new]</a></dt> <dt><a name="L006503" id="L006503"><a href="refm298.html#L005106">Socket#sysaccept</a> [new]</a></dt> <dt><a name="L006503" id="L006503"><a href="refm293.html#L005034">TCPServer#sysaccept</a> [new]</a></dt> <dt><a name="L006503" id="L006503"><a href="refm297.html#L005078">UNIXServer#sysaccept</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006504" id="L006504">2002-05-13</a></h3> <dl> <dt><a name="L006505" id="L006505">[parser] [change]</a></dt> <dt><a name="L006506" id="L006506"><a href="refm056.html#L001459">String#to_f</a> [change]</a></dt> <dt><a name="L006478" id="L006478"><a href="refm024.html#L000344">Float</a>() [change]</a></dt> <dd> <p>文字列を浮動小数点数に変換する内部処理で、ライブラリ関数 strtod(3) に依存しなくなりました。ロケールやライブラリの独自拡張により動作が変 わることはなくなりました。</p> <pre>p "0xa.a".to_f => ruby 1.6.7 (2002-03-01) [i586-linux] 10.625 => ruby 1.7.2 (2002-08-01) [i586-linux] 0.0</pre> </dd> </dl> <h3><a name="L006504" id="L006504">2002-05-13</a></h3> <dl> <dt><a name="L006447" id="L006447"><em class="XXINVALIDXX">Float#to_s</em> [compat]</a></dt> <dd> <p>最大の精度を示すためのフォーマットが "%.10g" から "%.16g" に変わりま した。(2003-03-20: その後、"%.15g" になりました <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=406">ruby-bugs-ja:PR#406</a><sup class="outside"><small>[外部]</small></sup>)</p> <pre>p 1.0/3 p 99.6 => ruby 1.6.7 (2002-03-01) [i586-linux] 0.3333333333 99.6 => ruby 1.7.2 (2002-08-01) [i586-linux] 0.3333333333333333 99.59999999999999 => ruby 1.8.0 (2003-03-20) [i586-linux] 0.333333333333333 99.6</pre> </dd> </dl> <h3><a name="L006507" id="L006507">2002-05-10</a></h3> <dl> <dt><a name="L006508" id="L006508"><a href="refm059.html#L001533">Thread#join</a> [compat]</a></dt> <dd> <p>スレッドを待ち合わせる時間を limit で指定できるようになりました。</p> </dd> </dl> <h3><a name="L006509" id="L006509">2002-04-26</a></h3> <dl> <dt><a name="L006510" id="L006510"><a href="refm065.html#L001666">Enumerable#partition</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006511" id="L006511">2002-04-22</a></h3> <dl> <dt><a name="L006512" id="L006512"><em class="XXINVALIDXX">メソッド引数の & 修飾</em> [compat]</a></dt> <dt><a name="L006513" id="L006513"><a href="refm052.html#L001282">Proc#to_proc</a> [new]</a></dt> <dd> <p>メソッドに渡す引数に & を修飾した場合、渡すオブジェクトが to_proc を 持っていればそれを実行し、その結果をブロックとして渡すようになりまし た。以前は、& 修飾できるのは Proc, Method オブジェクト限定でした。 これに伴い Proc#to_proc が追加されました。</p> <pre>class Foo def to_proc p "should generate Proc object" end end def foo end foo(&Foo.new) => ruby 1.7.2 (2002-04-24) [i586-linux] "should generate Proc object" -:10: wrong argument type Foo (expected Proc) (TypeError)</pre> </dd> </dl> <h3><a name="L006514" id="L006514">2002-04-19</a></h3> <dl> <dt><a name="L006515" id="L006515"><a href="refm047.html#L001183">Numeric#step</a> [compat]</a></dt> <dd> <p><a href="refm050.html">Fixnum</a>, <a href="refm048.html">Integer</a> から移動しました。</p> </dd> </dl> <h3><a name="L006516" id="L006516">2002-04-18</a></h3> <dl> <dt><a name="L006517" id="L006517"><a href="refm055.html#L001342">Regexp#to_s</a> [new]</a></dt> <dd> <p>追加。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16909">ruby-dev:16909</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p /foo(bar)*/.to_s => "(?-mix:foo(bar)*)"</pre> </dd> </dl> <h3><a name="L006518" id="L006518">2002-04-09</a></h3> <dl> <dt><a name="L006519" id="L006519"><a href="refm041.html#L000980">File.extname</a> [new]</a></dt> <dd> <p>追加。ファイル名の拡張子を返します。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/37617">ruby-talk:37617</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006520" id="L006520">2002-04-08</a></h3> <dl> <dt><a name="L006521" id="L006521"><a href="refm057.html#L001486">each_pair</a> [new]</a></dt> <dd> <p>追加。</p> </dd> </dl> <h3><a name="L006522" id="L006522">2002-04-06</a></h3> <dl> <dt><a name="L006523" id="L006523"><a href="refm049.html">Bignum</a> [bug]</a></dt> <dd> <p>-2147483648 より小さい数値の2進、8進、16進の表記がおかしくなっていました <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/34828">ruby-list:34828</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p "%b" % -2147483648 p "%b" % -2147483649 p "%b" % -2147483650 => ruby 1.6.7 (2002-03-01) [i586-linux] "..10000000000000000000000000000000" "..1" "..10" => ruby 1.7.2 (2002-04-11) [i586-linux] "..10000000000000000000000000000000" "..101111111111111111111111111111111" "..101111111111111111111111111111110"</pre> </dd> </dl> <h3><a name="L006520" id="L006520">2002-04-08</a></h3> <dl> <dt><a name="L006524" id="L006524">終了ステータス [compat]</a></dt> <dd> <p>raise SystemExit したときに終了ステータス 1 で終了するようになりました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16776">ruby-dev:16776</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006525" id="L006525">2002-04-02</a></h3> <dl> <dt><a name="L006526" id="L006526"><a href="refm147.html">dl.so</a> [lib] [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006527" id="L006527">2002-03-27</a></h3> <dl> <dt><a name="L006528" id="L006528"><a href="refm040.html#L000954">IO#sysseek</a>(offset, whence) [new]</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/21612">ruby-talk:21612</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/36703">ruby-talk:36703</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006529" id="L006529">2002-03-26</a></h3> <dl> <dt><a name="L006530" id="L006530"><a href="refm203.html">net/http.rb</a> [compat]</a></dt> <dd> <p>Net::HTTP のクラスメソッドで <a href="refm335.html">URI</a> オブジェクトが使えるようになった。</p> <pre>Net::HTTP.get_print(URI.parse('http://www.ruby-lang.org/ja/'))</pre> <p>インスタンスメソッドでは使えないので注意。</p> </dd> </dl> <h3><a name="L006529" id="L006529">2002-03-26</a></h3> <dl> <dt><a name="L006531" id="L006531"><a href="refm021.html#L000304">rescue/ensure on begin .. end while</a> [compat]</a></dt> <dd> <p>rescue/ensure を持つ begin 式も while/until 修飾できるようになりまし た。</p> <p>以前は、rescue/ensure を持つ while/until 修飾式は、通常の begin 式に while/until 修飾していると見なされ本体が必ず最初に実行されるという振 るまい(C の do ... while 構文と同じ)をしていませんでした。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/34618">ruby-list:34618</a><sup class="outside"><small>[外部]</small></sup></p> <pre>i = 0 begin p i i += 1 rescue end while i < 0 => ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.2 (2002-03-29) [i586-linux] 0</pre> </dd> </dl> <h3><a name="L006529" id="L006529">2002-03-26</a></h3> <dl> <dt><a name="L006532" id="L006532"><a href="refm023.html#L000327">rescue/ensure on class/module</a> [compat]</a></dt> <dd> <p>メソッド定義のほかにもクラス定義やモジュール定義にもrescue/ensureを つけられるようになりました。</p> <pre>class Foo hogehoge rescue p $! end => -:3: parse error ruby 1.6.7 (2002-03-01) [i586-linux] => ruby 1.7.2 (2002-03-29) [i586-linux] #<NameError: undefined local variable or method `hogehoge' for Foo:Class></pre> </dd> </dl> <h3><a name="L006533" id="L006533">2002-03-25</a></h3> <dl> <dt><a name="L006534" id="L006534"><a href="refm059.html#L001519">Thread.list</a> [compat]</a></dt> <dt><a name="L006535" id="L006535"><a href="refm060.html#L001555">ThreadGroup#list</a> [compat]</a></dt> <dd> <p>終了中(aborting)のスレッドもリストに含まれるようになりました。 <a href="http://www.freeml.com/ml_view.php?ml=rubyist&pg=1282">rubyist:1282</a><sup class="outside"><small>[外部]</small></sup></p> <pre>th = Thread.new {sleep} Thread.critical = true th.kill p Thread.list => ruby 1.6.7 (2002-03-01) [i586-linux] [#<Thread:0x401ba5c8 run>] => ruby 1.7.2 (2002-03-29) [i586-linux] [#<Thread:0x401b0618 aborting>, #<Thread:0x401ba0b4 run>]</pre> </dd> </dl> <h3><a name="L006533" id="L006533">2002-03-25</a></h3> <dl> <dt><a name="L006536" id="L006536"><a href="refm059.html#L001544">Thread#wakeup</a> [bug]</a></dt> <dt><a name="L006537" id="L006537"><a href="refm059.html#L001506">Thread#run</a> [bug]</a></dt> <dd> <p>終了中(aborting)のスレッドに対して実行するとスレッドが生き返る バグが修正されました。 <a href="http://www.freeml.com/ml_view.php?ml=rubyist&pg=1282">rubyist:1282</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006538" id="L006538">2002-03-22</a></h3> <dl> <dt><a name="L006539" id="L006539"><a href="refm024.html#L000403">sprintf</a>('%u') [compat]</a></dt> <dd> <p>sprintf の '%u' で、最上位ビットの繰り返しをあらわす ".." は、付加 されないようになりました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16522">ruby-dev:16522</a><sup class="outside"><small>[外部]</small></sup></p> <pre>p sprintf("%u", -1) => ruby 1.6.7 (2002-03-01) [i586-linux] "..4294967295" => -:1: warning: negative number for %u specifier ruby 1.7.2 (2002-03-29) [i586-linux] "4294967295"</pre> </dd> </dl> <h3><a name="L006538" id="L006538">2002-03-22</a></h3> <dl> <dt><a name="L006540" id="L006540"><a href="refm418.html">VMS</a> support [platform]</a></dt> <dd> <p><a href="refm418.html">VMS</a> のサポートパッチが取り込まれました。</p> </dd> <dt><a name="L006541" id="L006541">添付ライブラリ [lib] [new]</a></dt> <dd> <p>以下のライブラリが新たに追加されました。 <a href="refm180.html">iconv.so</a>, <a href="refm331.html">tsort.rb</a>, <a href="refm300.html">stringio.so</a>, <a href="refm302.html">strscan.so</a>, <a href="refm165.html">fileutils.rb</a>, racc/*</p> </dd> <dt><a name="L006542" id="L006542"><a href="refm036.html#L000749">Dir.glob</a> [compat]</a></dt> <dd> <p>Dir.glob に第2引数(マッチの挙動を変更するフラグ)を指定できるようにな りました。Dir[] にはこのフラグは指定できません。</p> <p>関連して定数 File::FNM_DOTMATCH (FNM_PERIOD の逆の意味)が追加されて います。</p> <pre>p Dir.glob("/*") => ruby 1.7.2 (2002-03-15) [i586-linux] ["/lost+found", "/root", ...] p Dir.glob("/*", File::FNM_DOTMATCH) => ruby 1.7.2 (2002-03-15) [i586-linux] ["/.", "/..", "/lost+found", "/root", "/boot", ...]</pre> </dd> <dt><a name="L006543" id="L006543">large file [bug]</a></dt> <dd> <p>large file(サイズが 4G bytes 以上のファイル)を正しく扱うようになりま した(?) <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/35316">ruby-talk:35316</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/35470">ruby-talk:35470</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006544" id="L006544"><a href="refm075.html#L001957">Process.kill</a> [compat]</a></dt> <dd> <p><a href="refm403.html">mswin32</a>, <a href="refm406.html">mingw32</a> でも、Process.kill(9, pid) でプロセスを 強制終了(TerminateProcess) できます。(Process.kill("KILL", pid) とは できないようです・・・2002-08-28 その後 "KILL" で指定できるようになっ たようです)</p> </dd> <dt><a name="L006545" id="L006545"><a href="refm113.html">benchmark.rb</a> [new]</a></dt> <dd> <p>added</p> </dd> <dt><a name="L006546" id="L006546"><a href="refm024.html#L000347">abort</a> [compat]</a></dt> <dd> <p>終了メッセージを指定できるようになりました。</p> <pre>abort("abort!") => abort! ruby 1.7.2 (2002-03-15) [i586-linux]</pre> <p>指定したメッセージは、例外 SystemExit オブジェクトの message 属性に設定されます。</p> <pre>begin abort("abort!") rescue SystemExit p $!.message end => abort! ruby 1.7.2 (2002-03-29) [i586-linux] "abort!"</pre> </dd> <dt><a name="L006547" id="L006547"><a href="refm176.html">GDBM</a> [lib] [change]</a></dt> <dt><a name="L006548" id="L006548"><a href="refm129.html">DBM</a> [lib] [change]</a></dt> <dt><a name="L006549" id="L006549"><a href="refm279.html">SDBM</a> [lib] [change]</a></dt> <dd> <p><em>ドキュメント未反映</em> <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16126">ruby-dev:16126</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006550" id="L006550"><a href="refm045.html#L001132">Module#include</a> [change]</a></dt> <dt><a name="L006551" id="L006551"><a href="refm030.html#L000568">Object#extend</a> [change]</a></dt> <dd> <p>複数のモジュールを渡したときにインクルードされる順序が変更されました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16035">ruby-dev:16035</a><sup class="outside"><small>[外部]</small></sup> extend も同様だそうです。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/16183">ruby-dev:16183</a><sup class="outside"><small>[外部]</small></sup></p> <pre>module Foo; end module Bar; end module Baz; end include Foo, Bar, Baz p Object.ancestors => ruby 1.6.7 (2002-03-01) [i586-linux] [Object, Baz, Bar, Foo, Kernel] => ruby 1.7.2 (2002-03-01) [i586-linux] [Object, Foo, Bar, Baz, Kernel] obj = Object.new module Foo; end module Bar; end module Baz; end obj.extend Foo, Bar, Baz class << obj p ancestors end => ruby 1.6.7 (2002-03-01) [i586-linux] [Baz, Bar, Foo, Object, Kernel] => ruby 1.7.2 (2002-03-08) [i586-linux] [Foo, Bar, Baz, Object, Kernel]</pre> <p>一つ一つ include した場合とは逆順になります。</p> <pre>module Foo; end module Bar; end module Baz; end include Foo include Bar include Baz p Object.ancestors => ruby 1.7.2 (2002-03-01) [i586-linux] [Object, Baz, Bar, Foo, Kernel]</pre> </dd> <dt><a name="L006552" id="L006552"><a href="refm296.html#L005060">UNIXSocket.pair</a> [new]</a></dt> <dt><a name="L006553" id="L006553"><a href="refm296.html#L005061">UNIXSocket.socketpair</a> [new]</a></dt> <dt><a name="L006554" id="L006554"><a href="refm296.html#L005067">UNIXSocket#recv_io</a> [new]</a></dt> <dt><a name="L006555" id="L006555"><a href="refm296.html#L005068">UNIXSocket#send_io</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006556" id="L006556">Proc#yield</a></dt> <dd> <p><a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=98">ruby-bugs-ja:PR#98</a><sup class="outside"><small>[外部]</small></sup> (2003-03-11: この変更はなくなった <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19799">ruby-dev:19799</a><sup class="outside"><small>[外部]</small></sup>) (その後 Proc#yield はなくなった)</p> <pre>Proc.new { break }.call Proc.new { break }.yield => -:2:in `yield': break from proc-closure (LocalJumpError) from -:2 ruby 1.7.3 (2002-09-05) [i586-linux] => ruby 1.8.0 (2003-03-12) [i586-linux]</pre> </dd> <dt><a name="L006557" id="L006557"><a href="refm031.html#L000687">Array#pack</a> [compat]</a></dt> <dt><a name="L006558" id="L006558"><a href="refm056.html#L001468">String#unpack</a> [compat]</a></dt> <dd> <p>pack/unpack のテンプレートにコメントを記述できるようになりました。</p> <pre>p [1,2,3,4].pack("s # short (fixed 2 bytes) i # int (machine dependent) l # long (fixed 4 bytes) q # quad (fixed 8 bytes)") => ruby 1.7.2 (2002-02-21) [i586-linux] "\001\000\002\000\000\000\003\000\000\000\004\000\000\000\000\000\000\000"</pre> </dd> <dt><a name="L006559" id="L006559">LocalJumpError#exitstatus [new]</a></dt> <dd> <p>追加(その後、exit_value になった)</p> <pre>def foo proc { return 10 } end begin foo.call rescue LocalJumpError p $!.exitstatus end => ruby 1.7.2 (2002-02-14) [i586-linux] 10</pre> </dd> <dt><a name="L006560" id="L006560"><a href="refm297.html#L005077">UNIXServer#listen</a> [new]</a></dt> <dt><a name="L006561" id="L006561"><a href="refm293.html#L005033">TCPServer#listen</a> [new]</a></dt> <dd> <p>追加。Socket#<a href="refm298.html#L005104">listen</a>と同じ。</p> </dd> <dt><a name="L006562" id="L006562"><a href="refm061.html#L001583">Time#getgm</a> [new]</a></dt> <dt><a name="L006563" id="L006563"><a href="refm061.html#L001585">Time#getlocal</a> [new]</a></dt> <dt><a name="L006564" id="L006564"><a href="refm061.html#L001584">Time#getutc</a> [new]</a></dt> <dt><a name="L006565" id="L006565"><a href="refm061.html#L001604">Time#gmt_offset</a> [new]</a></dt> <dt><a name="L006566" id="L006566"><a href="refm061.html#L001605">Time#gmtoff</a> [new]</a></dt> <dt><a name="L006567" id="L006567"><a href="refm061.html#L001603">Time#utc_offset</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006568" id="L006568">2002-05-21</a></h3> <dl> <dt><a name="L006569" id="L006569"><a href="refm045.html#L001088">Module#<=></a> [change]</a></dt> <dd> <p>継承関係のないクラス/モジュール同士の比較で nil を返すようになりました。</p> <pre>p Array <=> String => ruby 1.6.7 (2002-03-01) [i586-linux] 1 => ruby 1.7.3 (2002-09-13) [i586-linux] nil</pre> </dd> <dt><a name="L006570" id="L006570"><a href="refm040.html#L000920">IO#fsync</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006557" id="L006557"><a href="refm031.html#L000687">Array#pack</a> [compat]</a></dt> <dt><a name="L006558" id="L006558"><a href="refm056.html#L001468">String#unpack</a> [compat]</a></dt> <dd> <p>64 bit 整数のテンプレート文字 Q/q が追加されました(Quad の意)。 Q は unsigned、q は、signed です。 perl と異なり 64 bit 整数をサポートしないプラットフォームでも 使用できます。</p> <pre>p [ 1].pack("Q") p [-1].pack("Q") p [ 1].pack("q") p [-1].pack("q") p [ 1].pack("Q").unpack("Q") p [-1].pack("Q").unpack("Q") p [ 1].pack("q").unpack("q") p [-1].pack("q").unpack("q") => ruby 1.7.2 (2002-02-13) [i586-linux] "\001\000\000\000\000\000\000\000" "\377\377\377\377\377\377\377\377" "\001\000\000\000\000\000\000\000" "\377\377\377\377\377\377\377\377" [1] [18446744073709551615] [1] [-1]</pre> </dd> <dt><a name="L006571" id="L006571"><a href="refm043.html#L001066">Method#inspect</a> [compat]</a></dt> <dd> <p>特異メソッドに対する出力形式がより意味のあるものになりました。 <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=193">ruby-bugs-ja:PR#193</a><sup class="outside"><small>[外部]</small></sup></p> <pre>obj = [] def obj.foo end p obj.method(:foo) => ruby 1.6.6 (2001-12-26) [i586-linux] #<Method: Array(Array)#foo> => ruby 1.7.2 (2002-02-05) [i586-linux] #<Method: [].foo></pre> </dd> </dl> <h3><a name="L006572" id="L006572">2002-01-28</a></h3> <dl> <dt><a name="L006573" id="L006573"><a href="refm031.html#L000624">Array.new</a> [compat]</a></dt> <dt><a name="L006574" id="L006574"><a href="refm031.html#L000664">Array#fill</a> [compat]</a></dt> <dd> <p>ブロックの評価結果を fill する値として指定できるようになりました。ブ ロックは要素毎に評価されるので、下のような例では "val" が毎回生成さ れます。</p> <pre>ary = Array.new(3, "val") p ary.collect {|v| v.id } # => [537774036, 537774036, 537774036] ary = Array.new(3) { "val" } p ary.collect {|v| v.id } # => [537770040, 537770028, 537770016]</pre> </dd> </dl> <h3><a name="L006572" id="L006572">2002-01-28</a></h3> <dl> <dt><a name="L006575" id="L006575"><a href="refm038.html#L000802">File::Stat#rdev_major</a> [new]</a></dt> <dt><a name="L006576" id="L006576"><a href="refm038.html#L000803">File::Stat#rdev_minor</a> [new]</a></dt> <dd> <p>追加</p> <pre>s = File.stat("/dev/null") p s.rdev_major p s.rdev_minor => ruby 1.7.2 (2002-01-28) [i686-linux] 1 3</pre> </dd> </dl> <h3><a name="L006577" id="L006577">2002-01-24</a></h3> <dl> <dt><a name="L006578" id="L006578"><a href="refm039.html#L000884">Hash#update</a> [compat]</a></dt> <dd> <p>ブロックを指定できるようになりました。重複したキーに対する振舞いを制 御できます。</p> </dd> </dl> <h3><a name="L006579" id="L006579">2002-01-18</a></h3> <dl> <dt><a name="L006580" id="L006580"><a href="refm040.html#L000895">IO.open</a> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006581" id="L006581">2002-01-14</a></h3> <dl> <dt><a name="L006582" id="L006582"><a href="refm052.html">Proc</a> [bug]</a></dt> <dd> <p>$SAFE が、1 or 2 のとき 汚染された Proc は、ブロックにできなくなりました <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15682">ruby-dev:15682</a><sup class="outside"><small>[外部]</small></sup> <a name="footmark:1" id="footmark:1" href="#foottext:1"><sup><small>*1</small></sup></a></p> <pre>$SAFE = 1 proc = proc {} proc.taint p proc.tainted? def foo(&b) p b.tainted? end foo(&proc) => ruby 1.6.8 (2003-08-03) [i586-linux] true true => ruby 1.7.2 (2002-01-23) [i586-linux] true true</pre> </dd> </dl> <h3><a name="L006583" id="L006583">2002-01-08</a></h3> <dl> <dt><a name="L006584" id="L006584"><a href="refm056.html#L001460">String#to_i</a> [compat]</a></dt> <dd> <p>引数に基数(2,8,10,16)を指定できるようになりました。 (2002-01-26: 引数が 0 のときは prefix で基数を判定する)</p> <pre>p "010".to_i(16) => ruby 1.7.2 (2002-01-11) [i586-linux] 16</pre> </dd> </dl> <h3><a name="L006585" id="L006585">2001-12-08</a></h3> <dl> <dt><a name="L006586" id="L006586"><a href="refm039.html#L000837">Hash.new</a> [compat]</a></dt> <dd> <p>ハッシュのデフォルト値としてブロックを指定できるようになり ました。ブロックを指定すると空のハッシュ要素の参照に対して その都度ブロックを実行し、その結果を返します。 ブロックにはハッシュ自身と、ハッシュを参照したときのキーが渡されます</p> <pre>h = Hash.new("foo") p h.default.id p h.default(0).id # Hash#default はブロックに渡すキーを指定できます p h[0].id p h[0].id p h[1].id => ruby 1.7.2 (2001-12-10) [i586-linux] 537774276 537774276 537774276 537774276 h = Hash.new { "foo" } p h.default.id p h.default(0).id p h[0].id p h[0].id p h[1].id => ruby 1.7.2 (2001-12-10) [i586-linux] 537770616 537770352 537770316 537770280 h = Hash.new { raise IndexError, "undefined!!" } p h[0] => -:1: undefined!! (IndexError) from -:1:in `yield' from -:2:in `default' from -:2:in `[]' from -:2 ruby 1.7.2 (2001-12-10) [i586-linux]</pre> </dd> </dl> <h3><a name="L006587" id="L006587">2001-12-11</a></h3> <dl> <dt><a name="L006588" id="L006588">Array#select</a></dt> <dt><a name="L006589" id="L006589">Hash#select</a></dt> <dt><a name="L006590" id="L006590">ENV.select</a></dt> <dt><a name="L006591" id="L006591">MatchData#select</a></dt> <dt><a name="L006592" id="L006592">Struct::XXX#select</a></dt> <dd> <p>追加(その後、values_at というメソッドにとって変わられた)</p> <pre># ブロックを与えなかった場合は、indexes/indicies と同じです。 # (注: indexes/indicies は obsolete となっています) p [1,2,3].select(0,1,2,3) p [1,2,3].select(-4,-3,-2,-1) p( {1=>"a", 2=>"b", 3=>"c"}.select(3,2,1) ) => ruby 1.7.2 (2001-12-10) [i586-linux] [1, 2, 3, nil] [nil, 1, 2, 3] ["c", "b", "a"] # ブロックを与えた場合はこれまでの Enumerable#select と同じです。 p [1,2,3,4,5].select {|v| v % 2 == 1} p( {1=>"a", 2=>"b", 3=>"c"}.select {|k,v| k % 2 == 1} ) => ruby 1.6.6 (2001-12-04) [i586-linux] [1, 3, 5] [[1, "a"], [3, "c"]] => ruby 1.7.2 (2001-12-10) [i586-linux] [1, 3, 5] [[1, "a"], [3, "c"]] m = /(foo)(bar)(baz)/.match("foobarbaz") p m.select(0,1,2,3,4) # same as m.to_a.indexes(...) p m.select(-1,-2,-3) => ruby 1.7.2 (2001-12-10) [i586-linux] ["foobarbaz", "foo", "bar", "baz", nil] ["baz", "bar", "foo"]</pre> </dd> </dl> <h3><a name="L006587" id="L006587">2001-12-11</a></h3> <dl> <dt><a name="L006593" id="L006593">String#match(re) [new]</a></dt> <dd> <p>追加 re.match(str) と同じ。</p> </dd> </dl> <h3><a name="L006594" id="L006594">2001-11-17</a></h3> <dl> <dt><a name="L006595" id="L006595"><a href="refm071.html">Marshal</a> [marshal] [change]</a></dt> <dd> <p>Float のダンプが、sprintf(3) に依存しなくなりました。フォーマッ トバージョンが 4.6 から 4.7 に上がっています。 (この後、strtod(3) の組み込みにより、読み込み時もシステムの strtod(3) に依存しなくなっています)</p> </dd> </dl> <h3><a name="L006596" id="L006596">2001-11-12</a></h3> <dl> <dt><a name="L006597" id="L006597"><a href="refm024.html#L000417">trap</a> [bug]</a></dt> <dt><a name="L006598" id="L006598"><a href="refm024.html#L000415">trace_var</a> [bug]</a></dt> <dd> <p>第二引数に汚染された文字列を渡すと例外 <a href="refm099.html">SecurityError</a> が 起こるようになりました。1.6 では、汚染された文字列をセーフレ ベル4で評価するようになっていました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/32215">ruby-list:32215</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006599" id="L006599">2001-10-16</a></h3> <dl> <dt><a name="L006600" id="L006600"><a href="refm045.html#L001085">Module.new</a> [compat]</a></dt> <dt><a name="L006601" id="L006601"><a href="refm046.html#L001151">Class.new</a> [compat]</a></dt> <dd> <p>Module.new, Class.new でブロックが与えられた場合、生成した モジュール/クラスのコンテキストでブロックを実行するように なりました。</p> <pre>Module.new {|m| p m} => ruby 1.7.1 (2001-10-15) [i586-linux] #<Module:0x401afd5c></pre> </dd> </dl> <h3><a name="L006602" id="L006602">2001-10-10</a></h3> <dl> <dt><a name="L006603" id="L006603"><a href="refm030.html#L000563">Object#clone</a> [change]</a></dt> <dd> <p>Numeric など immutable なオブジェクトは clone できなくなりました。 <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=94">ruby-bugs-ja:PR#94</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://www.freeml.com/ml_view.php?ml=rubyist&pg=831">rubyist:0831</a><sup class="outside"><small>[外部]</small></sup></p> <pre>$DEBUG=true true.clone rescue nil false.clone rescue nil nil.clone rescue nil :sym.clone rescue nil (10**10).clone rescue nil 0.clone rescue nil => Exception `TypeError' at -:2 - can't clone true Exception `TypeError' at -:3 - can't clone false Exception `TypeError' at -:4 - can't clone nil Exception `TypeError' at -:5 - can't clone Symbol ruby 1.6.6 (2001-12-26) [i586-linux] => Exception `TypeError' at -:2 - can't clone TrueClass Exception `TypeError' at -:3 - can't clone FalseClass Exception `TypeError' at -:4 - can't clone NilClass Exception `TypeError' at -:5 - can't clone Symbol Exception `TypeError' at -:6 - can't clone Bignum Exception `TypeError' at -:7 - can't clone Fixnum ruby 1.7.1 (2001-10-10) [i586-linux]</pre> </dd> <dt><a name="L006604" id="L006604">puts</a></dt> <dt><a name="L006605" id="L006605">Array#to_s</a></dt> <dd> <p>puts は、配列を特別扱いしなくなり、<a href="refm031.html#L000709">Array#to_s</a> が出力されるようになりました。<a href="refm031.html#L000709">Array#to_s</a> は、 デフォルトで間に改行を挟んだ文字列を出力するように変更され たため挙動に違いはありません(ただし <a href="refm025.html#L000445">$,</a> の 値に影響されます)。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15043">ruby-dev:15043</a><sup class="outside"><small>[外部]</small></sup></p> <p>この変更は、まだ試験的ですが元に戻りそうな気配。。。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15313">ruby-dev:15313</a><sup class="outside"><small>[外部]</small></sup></p> <pre>$, = "," puts %w(foo bar baz) => ruby 1.6.5 (2001-11-01) [i586-linux] foo bar baz => ruby 1.7.2 (2001-11-25) [i586-linux] foo,bar,baz</pre> <p>・・・元に戻ったようです。</p> <pre>=> ruby 1.7.2 (2001-12-10) [i586-linux] foo bar baz</pre> </dd> <dt><a name="L006606" id="L006606"><a href="refm048.html#L001222">Integer#to_s</a> [compat]</a></dt> <dd> <p>引数に基数を指定できるようになりました。</p> <pre>p 10.to_s(16) => ruby 1.7.2 (2001-11-25) [i586-linux] "a"</pre> </dd> <dt><a name="L006607" id="L006607"><a href="refm056.html#L001390">String#chomp</a> [change]</a></dt> <dt><a name="L006608" id="L006608"><a href="refm056.html#L001391">String#chomp!</a> [change]</a></dt> <dt><a name="L006609" id="L006609"><a href="refm024.html#L000358">chomp</a> [change]</a></dt> <dt><a name="L006610" id="L006610"><a href="refm024.html#L000359">chomp!</a> [change]</a></dt> <dd> <p>$/ が "\n" (デフォルト)のとき、どの行末形式("\r\n", "\r", "\n" のいずれでも)でもそれらを取り除くようになりました。</p> <pre>p "aaa\r\n".chomp => ruby 1.6.5 (2001-11-01) [i586-linux] "aaa\r" => ruby 1.7.2 (2001-11-25) [i586-linux] "aaa"</pre> </dd> <dt><a name="L006611" id="L006611">Complex#to_i [lib] [obsolete]</a></dt> <dt><a name="L006612" id="L006612">Complex#to_f [lib] [obsolete]</a></dt> <dt><a name="L006613" id="L006613">Complex#to_r [lib] [obsolete]</a></dt> <dd> <p>Complex#to_i, #to_f, #to_r はなくなりました。 <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=102">ruby-bugs-ja:PR#102</a><sup class="outside"><small>[外部]</small></sup>, <a href="http://www.freeml.com/ml_view.php?ml=rubyist&pg=879">rubyist:0879</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006614" id="L006614">メソッド呼び出し [parser] [change]</a></dt> <dd> <p>メソッド名と括弧の間に空白があるとその括弧は引数を括る括弧ではなく 式の括弧と解釈するようになりました。 <a name="footmark:2" id="footmark:2" href="#foottext:2"><sup><small>*2</small></sup></a> <a name="footmark:3" id="footmark:3" href="#foottext:3"><sup><small>*3</small></sup></a></p> <pre>p (1+2)*3 => -:1: warning: p (...) interpreted as method call -:1: warning: useless use of * in void context ruby 1.6.5 (2001-09-19) [i586-linux] 3 -:1: undefined method `*' for nil (NameError) => -:1: warning: p (...) interpreted as command call ruby 1.7.1 (2001-06-05) [i586-linux] 9</pre> </dd> <dt><a name="L006615" id="L006615"><a href="refm071.html">Marshal</a> [marshal] [bug]</a></dt> <dd> <p>構造体クラスのサブクラスをダンプしたものがロードできませんでした。 <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=104">ruby-bugs-ja:PR#104</a><sup class="outside"><small>[外部]</small></sup></p> <pre>S = Struct.new("S", :a) class C < S end p Marshal.load(Marshal.dump(C.new)) => -:4: warning: instance variable __member__ not initialized -:4:in `dump': uninitialized struct (TypeError) from -:4 ruby 1.6.5 (2001-09-19) [i586-linux] => ruby 1.7.1 (2001-10-19) [i586-linux] #<C a=nil></pre> </dd> <dt><a name="L006616" id="L006616">alias [bug]</a></dt> <dd> <p>グローバル変数のエイリアスが効いていませんでした。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/14922">ruby-dev:14922</a><sup class="outside"><small>[外部]</small></sup></p> <pre>$g2 = 1 alias $g1 $g2 p [$g1, $g2] $g2 = 2 p [$g1, $g2] => ruby 1.6.5 (2001-09-19) [i586-linux] [1, 1] [1, 2] => ruby 1.7.1 (2001-10-19) [i586-linux] [1, 1] [2, 2]</pre> </dd> </dl> <h3><a name="L006617" id="L006617">2001-10-03</a></h3> <dl> <dt><a name="L006618" id="L006618"><a href="refm056.html#L001366">String#[]</a> [new]</a></dt> <dt><a name="L006619" id="L006619"><a href="refm056.html#L001373">String#[]=</a> [new]</a></dt> <dd> <p>追加</p> <pre>String#[re, idx] String#[re, idx] = val</pre> <p>正規表現を渡す形式で、オプションの第二引数 idx が追加されました。</p> <pre>p "foobarbaz"[/(foo)(bar)(baz)/, 1] p /(foo)(bar)(baz)/.match("foobarbaz").to_a[1] => -:2: warning: ambiguous first argument; make sure ruby 1.7.1 (2001-10-05) [i586-linux] "foo" "foo" str = "foobarbaz" p str[/(foo)(bar)(baz)/, 2] = "BAR" # => "BAR" p str # => "fooBARbaz"</pre> <p>str[/re/, 0] は、str[/re/] と同じです。</p> </dd> </dl> <h3><a name="L006620" id="L006620">2001-10-02</a></h3> <dl> <dt><a name="L006621" id="L006621"><a href="refm046.html#L001154">Class#allocate</a> [new]</a></dt> <dd> <p>allocate と initialize の二つのメソッドでオブジェクトを 生成するようになりました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/14847">ruby-dev:14847</a><sup class="outside"><small>[外部]</small></sup> rb_define_alloc_func() も参照。</p> </dd> </dl> <h3><a name="L006622" id="L006622">2001-09-24</a></h3> <dl> <dt><a name="L006623" id="L006623"><a href="refm031.html#L000624">Array.new</a> [compat]</a></dt> <dd> <p>Array.new の引数に配列を渡すとそのコピーを生成するようになりました。</p> <pre>ary = [1,2,3] ary2 = Array.new ary p ary, ary2 p ary.id, ary2.id => ruby 1.7.1 (2001-10-05) [i586-linux] [1, 2, 3] [1, 2, 3] 537758120 537755360</pre> </dd> </dl> <h3><a name="L006624" id="L006624">2001-09-18</a></h3> <dl> <dt><a name="L006625" id="L006625"><a href="refm056.html#L001352">String.new</a> [compat]</a></dt> <dd> <p>String.new の引数を省略できるようになりました。</p> <pre>p String.new => -:1:in `initialize': wrong # of arguments(0 for 1) (ArgumentError) from -:1:in `new' from -:1 ruby 1.7.1 (2001-08-29) [i586-linux] => ruby 1.7.1 (2001-10-05) [i586-linux] ""</pre> </dd> </dl> <h3><a name="L006626" id="L006626">2001-09-11</a></h3> <dl> <dt><a name="L006627" id="L006627"><a href="refm036.html#L000770">Dir#path</a> [new]</a></dt> <dd> <p>追加</p> <pre>p Dir.open(".").path => ruby 1.7.1 (2001-10-05) [i586-linux] "."</pre> </dd> </dl> <h3><a name="L006628" id="L006628">2001-08-26</a></h3> <dl> <dt><a name="L006629" id="L006629"><a href="refm268.html">Readline</a> [change]</a></dt> <dd> <p>Readline.readline 実行中に Ctrl-C により中断した後でも、端末状態を 復帰するようにしました。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/14574">ruby-dev:14574</a><sup class="outside"><small>[外部]</small></sup></p> </dd> </dl> <h3><a name="L006630" id="L006630">2001-08-29</a></h3> <dl> <dt><a name="L006631" id="L006631"><a href="refm074.html">Precision</a>.included [new]</a></dt> <dd> <p>追加(<a href="refm045.html">Module#included</a> の再定義)</p> </dd> </dl> <h3><a name="L006632" id="L006632">2001-08-23</a></h3> <dl> <dt><a name="L006633" id="L006633"><a href="refm079.html">Signal</a> モジュール [new]</a></dt> <dd> <p>追加。</p> </dd> <dt><a name="L006634" id="L006634">while, until, class, def の値 [ruby] [change]</a></dt> <dd> <p>while, until, class, def が式として値を返すようになりました。</p> <p>class/module は最後に評価した式の結果を返します。def は nil を返しま す。while/until は、通常 nil を返しますが、break の引数により任意の 値を返すことができます。</p> <pre>p(while false; p nil end) p(while true; break "bar" end) p(class Foo; true end) p(module Bar; true end) p(def foo; true end) => -:1: void value expression -:2: void value expression -:3: void value expression -:4: void value expression -:5: void value expression ruby 1.7.1 (2001-08-20) [i586-linux] => -:1: warning: void value expression -:2: warning: void value expression -:3: warning: void value expression -:4: warning: void value expression -:5: warning: void value expression ruby 1.7.1 (2001-08-23) [i586-linux] false "bar" true true nil</pre> <p>while/until は途中で nil を返すように修正されました。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15909">ruby-dev:15909</a><sup class="outside"><small>[外部]</small></sup></p> <pre>=> -:1: warning: void value expression -:2: warning: void value expression -:3: warning: void value expression -:4: warning: void value expression -:5: warning: void value expression ruby 1.7.2 (2002-02-20) [i586-linux] nil "bar" true true nil</pre> </dd> <dt><a name="L006635" id="L006635"><a href="refm054.html">Range</a>#===</a></dt> <dd> <p>文字列の範囲オブジェクトと文字列との比較を行う場合に、 以前は範囲の両端と比較していましたが、String#upto により1要素ずつ 比較を行うようになりました。</p> <p>(2002-06-04: その後変更されている)</p> <pre>p(("a" .. "ab") === "aa") => ruby 1.7.1 (2001-08-20) [i586-linux] true => ruby 1.7.1 (2001-08-23) [i586-linux] false</pre> </dd> <dt><a name="L006636" id="L006636"><a href="refm065.html">Enumerable</a>#sort_by [new]</a></dt> <dd> <p>追加。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/8986">ruby-dev:8986</a><sup class="outside"><small>[外部]</small></sup>以降で提案された Schwartzian transform を行うための sort です。</p> </dd> <dt><a name="L006637" id="L006637">Curses [lib] [compat]</a></dt> <dd> <p>Updated. New methods and constants for using the mouse, character attributes, colors and key codes have been added.</p> </dd> <dt><a name="L006638" id="L006638"><a href="refm054.html">Range</a>#step([step=1]) [new]</a></dt> <dd> <p>追加。step ごとの要素で繰り返します。</p> </dd> <dt><a name="L006639" id="L006639">条件式中の正規表現リテラル [parser] [change]</a></dt> <dd> <p>条件式中の正規表現リテラルは警告が出るようになりました。</p> <p>$_ との正規表現マッチは、明示的に ~/re/ (単項の <a href="refm055.html#L001335">~</a> メソッ ド)などとすることが推奨されます。</p> <pre>$_ = "foo" p $_ if /foo/ p $_ if /bar/ => -:2: warning: regex literal in condition -:3: warning: regex literal in condition ruby 1.7.1 (2001-08-14) [i586-linux] "foo"</pre> </dd> <dt><a name="L006640" id="L006640"><a href="refm056.html#L001448">String#lstrip</a> [new]</a></dt> <dt><a name="L006641" id="L006641"><a href="refm056.html#L001450">String#rstrip</a> [new]</a></dt> <dt><a name="L006642" id="L006642"><a href="refm056.html#L001449">String#lstrip!</a> [new]</a></dt> <dt><a name="L006643" id="L006643"><a href="refm056.html#L001451">String#rstrip!</a> [new]</a></dt> <dd> <p>追加。左端あるいは右端の空白類を取り除きます。</p> </dd> <dt><a name="L006644" id="L006644"><a href="refm298.html#L005093">Socket.pack_sockaddr_in</a> [new]</a></dt> <dt><a name="L006645" id="L006645"><a href="refm298.html#L005098">Socket.unpack_sockaddr_in</a> [new]</a></dt> <dd> <p>追加。ソケットアドレス構造体(INET domain)のpack/unpack。</p> </dd> <dt><a name="L006646" id="L006646"><a href="refm298.html#L005095">Socket.pack_sockaddr_un</a> [new]</a></dt> <dt><a name="L006647" id="L006647"><a href="refm298.html#L005099">Socket.unpack_sockaddr_un</a> [new]</a></dt> <dd> <p>追加。ソケットアドレス構造体(UNIX domain)のpack/unpack。</p> </dd> <dt><a name="L006648" id="L006648"><a href="refm056.html#L001383">String#casecmp</a> [new]</a></dt> <dd> <p>追加。アルファベットの大小を無視した文字列比較。</p> </dd> <dt><a name="L006649" id="L006649"><em class="XXINVALIDXX">String#eql?</em> [change]</a></dt> <dd> <p><a href="refm025.html">$=</a> の値に関らず常にアルファベットの大小を区別するよ うになりました。</p> </dd> <dt><a name="L006650" id="L006650"><a href="refm045.html#L001104">Module#include?</a> [new]</a></dt> <dd> <p>Added. <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/13941">ruby-dev:13941</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006651" id="L006651"><a href="refm036.html#L000753">Dir.chdir</a> [bug]</a></dt> <dd> <p>Changed to warn only when invoked from multiple threads or no block is given. <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/13823">ruby-dev:13823</a><sup class="outside"><small>[外部]</small></sup></p> <pre>Dir.chdir("/tmp") pwd = Dir.pwd #=> "/tmp" puts pwd Dir.chdir("foo") { pwd = Dir.pwd #=> "/tmp/foo" puts pwd Dir.chdir("bar") { # <-- previously warned pwd = Dir.pwd #=> "/tmp/foo/bar" puts pwd } pwd = Dir.pwd #=> "/tmp/foo" puts pwd } pwd = Dir.pwd #=> "/tmp" puts pwd</pre> </dd> <dt><a name="L006556" id="L006556">Proc#yield</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/13597">ruby-dev:13597</a><sup class="outside"><small>[外部]</small></sup> (その後、削除された)</p> <p>引数の数をチェックしない点を除けば Proc#call と同じです。</p> </dd> <dt><a name="L006652" id="L006652"><a href="refm041.html#L000981">File.fnmatch</a> [new]</a></dt> <dt><a name="L006653" id="L006653"><a href="refm041.html#L000982">File.fnmatch?</a> [new]</a></dt> <dd> <p>追加</p> <p>このメソッドで使用するフラグ FNM_NOESCAPE, FNM_PATHNAME, FNM_PERIOD, FNM_CASEFOLD も<a href="refm067.html">File::Constants</a> モジュールに定義されました。</p> <pre>p %w(foo bar bar.bak).reject! { |fn| File::fnmatch?("*.bak", fn) } => ruby 1.7.1 (2001-06-12) [i586-linux] ["foo", "bar"]</pre> </dd> </dl> <h3><a name="L006654" id="L006654">2001-06-12</a></h3> <dl> <dt><a name="L006655" id="L006655"><em class="XXINVALIDXX">Method#==</em> [new]</a></dt> <dd> <p>追加</p> </dd> </dl> <h3><a name="L006656" id="L006656">2001-06-12(?)</a></h3> <dl> <dt><a name="L006657" id="L006657">多重代入 [change]</a></dt> <dd> <p>多重代入の規則を見直しました。変更は以下の点だけです。</p> <pre># *a = nil p a => ruby 1.7.1 (2001-06-05) [i586-linux] [nil] => ruby 1.7.1 (2001-06-12) [i586-linux] [] => ruby 1.8.0 (2003-01-18) [i586-linux] [nil]</pre> <p>が、この変更は戻ったようです。おそらく 2003-01-07 の eval.c の変更 ブロックパラメータの場合と比較するとこの方が正しいのでしょう。</p> <pre>def foo yield nil yield end foo {|*a| p a} => ruby 1.6.8 (2002-12-24) [i586-linux] [nil] [nil] => ruby 1.8.0 (2003-08-04) [i586-linux] [nil] []</pre> </dd> </dl> <h3><a name="L006658" id="L006658">2001-06-05(?)</a></h3> <dl> <dt><a name="L006659" id="L006659">配列展開 [change]</a></dt> <dd> <p>以下の挙動を修正しました。 現在は、1要素の配列も正常に展開されます。</p> <pre>a = *[1] p a #=> [1] => ruby 1.6.8 (2002-12-24) [i586-linux] [1] => ruby 1.7.1 (2001-06-05) [i586-linux] 1</pre> </dd> <dt><a name="L006660" id="L006660"><a href="refm093.html">NameError</a> & <a href="refm094.html">NoMethodError</a> [change]</a></dt> <dd> <p>NameError を StandardError のサブクラスに戻しました。 クラス階層は以下のようになりました。</p> <pre>NoMethodError < NameError < StandardError.</pre> </dd> <dt><a name="L006661" id="L006661"><a href="refm041.html#L000987">File.open</a> [bug]</a></dt> <dd> <p>第2引数を数値(File::RDONLY|File::CREATとか)で指定した場合に限り、第3 引数を用いていましたが、第3引数が与えられれば常に有効にするように しました。 <a href="http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja?selectid=54">ruby-bugs-ja:PR#54</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006662" id="L006662">[ruby] [compat]</a></dt> <dd> <p>内部のハッシュテーブルを使用することにより定数参照の速度を改善したそうです。 (ChangeLogの</p> <pre>Tue Jun 5 16:15:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org></pre> <p>に該当するようです)</p> </dd> <dt><a name="L006663" id="L006663">文法 [parser] [change]</a></dt> <dd> <p>以下のようなコード(pの後の空白に注意)</p> <pre>p ("xx"*2).to_i</pre> <p>は、</p> <pre>(p("xx"*2)).to_i</pre> <p>ではなく</p> <pre>p (("xx"*2).to_i)</pre> <p>とみなすようになりました(これはまだ実験的な変更です)。</p> </dd> <dt><a name="L006664" id="L006664"><em class="XXINVALIDXX">Range#to_ary</em></a></dt> <dd> <p>追加。これにより(配列への暗黙の変換が適用されるので)以下のように書く ことができます。(2003-03-29: その後、Range#to_ary はなくなりました)</p> <pre>a, b, c = 1..3 p [a, b, c] => ruby 1.6.8 (2002-12-24) [i586-linux] [1..3, nil, nil] => ruby 1.7.3 (2002-12-11) [i586-linux] [1, 2, 3] => ruby 1.8.0 (2003-03-29) [i586-linux] [1..3, nil, nil]</pre> </dd> <dt><a name="L006665" id="L006665">break and next [compat]</a></dt> <dd> <p>break, next は、引数を指定することでイテレータや yield の値を返す ことができるようになりました。(この機能はまだ実験です)</p> <p>break [n] はイテレータを終了させ、n がそのイテレータの戻り値になります。 next [n] はブロックを抜け、n が yield の戻り値になります。</p> <pre>def foo p yield end foo { next 1 } def bar yield end p bar { break "foo" } => ruby 1.7.1 (2001-08-20) [i586-linux] 1 "foo"</pre> </dd> <dt><a name="L006666" id="L006666">to_str [compat]</a></dt> <dd> <p>to_str を定義したオブジェクトはより広範囲にStringとして振舞うように なりました。</p> <p>文字列を引数に取るほとんどの組み込みメソッドは、to_str による暗黙の 型変換を試みます。</p> <pre>foo = Object.new class <<foo def to_str "foo" end end p File.open(foo) => -:7:in `open': wrong argument type Object (expected String) (TypeError) ruby 1.6.4 (2001-04-19) [i586-linux] => -:7:in `open': No such file or directory - "foo" (Errno::ENOENT) ruby 1.7.0 (2001-05-02) [i586-linux]</pre> </dd> <dt><a name="L006667" id="L006667">拡張ライブラリAPI(STR2CSTR()) [api] [new]</a></dt> <dd> <p>拡張ライブラリの API である STR2CSTR() は、与えられたオブジェクト が文字列でなくかつ to_str メソッドを持つ場合、内部で to_str を呼び 出して暗黙の型変換を行います。この場合、変換結果が保持する文字列ポ インタを返しますが、このAPIでは暗黙の型変換結果のオブジェクトがど こからも参照されないため、型変換結果が GC される可能性があります。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12731">ruby-dev:12731</a><sup class="outside"><small>[外部]</small></sup></p> <p>version 1.7 以降では代わりに StringValuePtr() を使用します。こちら は、引数の参照先が暗黙の型変換の結果に置き換わるため変換結果が GC されません。(version 1.7 では、STR2CSTR() は、obsolete です)</p> <p>もう一つ新しく StringValue() という API が用意されています。こちら は、引数が to_str による暗黙の型変換を期待する場合に使用します。 引数が文字列なら何もしません。 文字列を受け取るメソッドの最初の方で読んでおくと便利です。</p> <p>なお、今のところ str2cstr() (Cポインタと文字列長を返す)の代わりに なる安全な API は用意されていません。(<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15644">ruby-dev:15644</a><sup class="outside"><small>[外部]</small></sup>で提案は ありました)</p> </dd> <dt><a name="L006668" id="L006668">範囲演算子式中のリテラル [ruby] [change]</a></dt> <dd> <p>範囲演算子式中の単独の数値リテラルが <code>$.</code> と比較されるのは -e オプションによる1行スクリプトの中だけになりました。</p> </dd> <dt><a name="L006669" id="L006669">rescue 節の例外クラスと発生した例外オブジェクトの比較 [ruby] [change]</a></dt> <dd> <p>発生した例外 $! と rescue 節の例外クラスとは <a href="refm045.html#L001093">Module#===</a> を使って比較するようになりました。</p> <p>以前は kind_of? による比較なので基本的な動作に変わりはありませんが、 SystemCallError.=== は特別に errno が一致する例外を同じと見なすよう に再定義されました。これにより、例えば Errno::EWOULDBLOCK と Errno::EAGAIN が同じ意味(同じerrno)の場合にどちらを指定しても rescue できるようになりました。</p> <p>その後、errno が一致する Errno::XXX オブジェクトは同一のオブジェクト になったのでこの変更の効果はなくなってますが、変更自体は残ってます。 (ユーザで例外クラスを定義するのに使えるかもしれません) <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19589">ruby-dev:19589</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006670" id="L006670"><em class="XXINVALIDXX">Array#collect</em> [bug]</a></dt> <dt><a name="L006671" id="L006671"><em class="XXINVALIDXX">Array#map</em> [bug]</a></dt> <dd> <p>Array#collect がブロックを伴わない場合に self.dup を返していました。 そのため、Array 以外を返すことがありました<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/30480">ruby-list:30480</a><sup class="outside"><small>[外部]</small></sup>。</p> <pre>Foo = Class.new Array a = Foo.new p a.map.class p a.collect.class => ruby 1.7.1 (2001-06-12) [i586-linux] Array Foo => ruby 1.7.1 (2001-07-31) [i586-linux] Array Array</pre> </dd> <dt><a name="L006672" id="L006672"><a href="refm031.html#L000646">Array#dup</a></a></dt> <dd> <p>dup のバグ修正 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/30481">ruby-list:30481</a><sup class="outside"><small>[外部]</small></sup> (1.6 でも修正された)</p> <pre>class Foo < Array attr_accessor :foo end a = Foo.new a.foo = 1 b = a.dup b.foo b.foo = 99 p b.foo # => ruby 1.6.4 (2001-06-04) [i586-linux] nil # => ruby 1.6.4 (2001-07-31) [i586-linux] 99</pre> </dd> <dt><a name="L006673" id="L006673"><a href="refm031.html#L000661">Array#fetch</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006674" id="L006674"><a href="refm031.html#L000679">Array#insert</a> [new]</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/14289">ruby-talk:14289</a><sup class="outside"><small>[外部]</small></sup></p> <p><code>ary[n,0] = [other,...]</code> と同じ(ただし self を返す)</p> <pre>ary = [0,1,2,3] ary[2, 0] = [4, 5, 6] p ary ary = [0,1,2,3] ary.insert(2, 4, 5, 6) p ary</pre> </dd> <dt><a name="L006675" id="L006675"><a href="refm031.html#L000687">Array#pack</a> [change]</a></dt> <dt><a name="L006676" id="L006676"><a href="refm056.html#L001468">String#unpack</a> [change]</a></dt> <dd> <p>Array#pack, String#unpack のテンプレート文字 "p", "P" は、nil と NULLポインタの相互変換を行うようになりました<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/13017">ruby-dev:13017</a><sup class="outside"><small>[外部]</small></sup>。</p> <pre>p [nil].pack("p") p "\0\0\0\0".unpack("p") => ruby 1.7.0 (2001-05-17) [i586-linux] "\000\000\000\000" [nil]</pre> </dd> <dt><a name="L006677" id="L006677"><a href="refm031.html#L000704">Array#sort!</a> [change]</a></dt> <dd> <p>常にself返すようになりました。</p> <p>将来にわたってこのことが保証されるわけではないそうです <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12506">ruby-dev:12506</a><sup class="outside"><small>[外部]</small></sup>。</p> </dd> <dt><a name="L006678" id="L006678"><em class="XXINVALIDXX">Class.inherited</em> [compat]</a></dt> <dd> <p>(注: Class#inherited ではありません)</p> <p>以前は、クラスのサブクラスの定義を禁止するために定義されていましたが、 (<a href="refm104.html">TypeError</a>例外を発生させるメソッドとして定義されていました) こ の役割は Class.new が担保するようになりました。そのため、 Class.inherited メソッドの定義はなくなりました。</p> <pre>class SubClass < Class end #=> -:1:in `inherited': can't make subclass of Class (TypeError) from -:1 ruby 1.7.1 (2001-06-12) [i586-linux] #=> -:1: can't make subclass of Class (TypeError) ruby 1.7.1 (2001-07-31) [i586-linux]</pre> </dd> <dt><a name="L006679" id="L006679"><a href="refm036.html#L000765">Dir.open</a> [change]</a></dt> <dd> <p>ブロックを伴う場合<a href="refm041.html">File</a>.openと同様に、ブロックの結果がメソッドの 戻り値になりました。(1.6以前は <code>nil</code> 固定)</p> </dd> <dt><a name="L006680" id="L006680"><a href="refm036.html#L000753">Dir.chdir</a> [compat]</a></dt> <dd> <p>ブロックを指定できるようになりました。</p> </dd> <dt><a name="L006681" id="L006681"><a href="refm036.html#L000749">Dir.glob</a> [change]</a></dt> <dd> <p>先行するバックスラッシュにより、ワイルドカードをエスケープ できるようになりました。 また、空白類に特殊な意味はなくなりました('\0'の効果は残っています)。</p> </dd> <dt><a name="L006682" id="L006682"><a href="refm065.html#L001644">Enumerable#all?</a> [new]</a></dt> <dt><a name="L006683" id="L006683"><a href="refm065.html#L001646">Enumerable#any?</a> [new]</a></dt> <dt><a name="L006684" id="L006684"><a href="refm065.html#L001657">Enumerable#inject</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006685" id="L006685"><a href="refm041.html#L000973">File.lchmod</a> [new]</a></dt> <dt><a name="L006686" id="L006686"><a href="refm041.html#L000975">File.lchown</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006687" id="L006687"><a href="refm040.html#L000894">IO.for_fd</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006688" id="L006688"><a href="refm040.html#L000901">IO.read</a> [new]</a></dt> <dd> <p>追加。<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/9460">ruby-talk:9460</a><sup class="outside"><small>[外部]</small></sup>が実装に至った経緯だと思う</p> </dd> <dt><a name="L006689" id="L006689"><a href="refm086.html">Interrupt</a> [change]</a></dt> <dd> <p>Interrupt は、<a href="refm085.html">SignalException</a>のサブクラスになりました。 (1.6以前はExceptionのサブクラス)</p> </dd> <dt><a name="L006690" id="L006690"><a href="refm071.html#L001867">Marshal::MAJOR_VERSION</a> [new]</a></dt> <dt><a name="L006691" id="L006691"><a href="refm071.html#L001868">Marshal::MINOR_VERSION</a> [new]</a></dt> <dd> <p>追加。Marshal が出力するダンプフォーマットのバージョン番号です。 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/14172">ruby-dev:14172</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006664" id="L006664"><em class="XXINVALIDXX">MatchData#to_ary</em></a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12766">ruby-dev:12766</a><sup class="outside"><small>[外部]</small></sup> (2003-03-28: が、その後なくなりました)</p> <p>Regexp#match の利便のために用意されました。以前は、</p> <pre>foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz").to_a[1..-1] p [foo, bar, baz]</pre> <p>とする必要がありましたが、これにより</p> <pre>_, foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz") p [foo, bar, baz]</pre> <p>とすることができます。</p> </dd> <dt><a name="L006692" id="L006692"><a href="refm072.html#L001877">Math.acos</a> [new]</a></dt> <dt><a name="L006693" id="L006693"><a href="refm072.html#L001878">Math.asin</a> [new]</a></dt> <dt><a name="L006694" id="L006694"><a href="refm072.html#L001879">Math.atan</a> [new]</a></dt> <dt><a name="L006695" id="L006695"><a href="refm072.html#L001887">Math.cosh</a> [new]</a></dt> <dt><a name="L006696" id="L006696"><a href="refm072.html#L001888">Math.sinh</a> [new]</a></dt> <dt><a name="L006697" id="L006697"><a href="refm072.html#L001889">Math.tanh</a> [new]</a></dt> <dt><a name="L006698" id="L006698"><a href="refm072.html#L001894">Math.hypot</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006699" id="L006699"><a href="refm045.html#L001133">Module#included</a> [new]</a></dt> <dd> <p>追加。Module#append_feature の後に呼ばれるhook</p> </dd> <dt><a name="L006700" id="L006700"><a href="refm045.html#L001135">Module#method_removed</a> [new]</a></dt> <dt><a name="L006701" id="L006701"><a href="refm045.html#L001136">Module#method_undefined</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006702" id="L006702">Numeric#/</a></dt> <dd> <p>追加。商を返します。</p> <p>(その後、div に変わった(?))</p> </dd> <dt><a name="L006703" id="L006703"><a href="refm094.html">NoMethodError</a> [new]</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12763">ruby-dev:12763</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006704" id="L006704">NotImplementError [obsolete]</a></dt> <dd> <p>旧称は削除されました。<a href="refm083.html">NotImplementedError</a>を使ってください</p> </dd> <dt><a name="L006705" id="L006705"><a href="refm030.html#L000616">Object#singleton_method_removed</a> [new]</a></dt> <dt><a name="L006706" id="L006706"><a href="refm030.html#L000617">Object#singleton_method_undefined</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006707" id="L006707"><a href="refm030.html#L000600">Object#singleton_methods</a> [compat]</a></dt> <dd> <p>省略可能な引数 all が追加されました。</p> <pre>class Foo def foo end end obj = Foo.new module Bar def bar end end class <<obj include Bar def baz end end p obj.singleton_methods #=> ["baz"] p obj.singleton_methods true #=> ["baz", "bar"]</pre> </dd> <dt><a name="L006708" id="L006708"><a href="refm075.html#L001962">Process.times</a> [change]</a></dt> <dd> <p><a href="refm061.html#L001574">Time.times</a> から移動しました。 (Time.times も残っていますが、warningが出ます)</p> </dd> <dt><a name="L006709" id="L006709"><a href="refm053.html">Process::Status</a> [new]</a></dt> <dd> <p>追加。<code>$?</code> の値も整数からこのクラスのインスタンスになりました。</p> </dd> <dt><a name="L006710" id="L006710"><a href="refm075.html#L001965">Process.waitall</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006711" id="L006711"><a href="refm054.html#L001311">Range#include?</a> [new]</a></dt> <dt><a name="L006712" id="L006712"><em class="XXINVALIDXX">Range#member?</em> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006713" id="L006713"><a href="refm055.html#L001329">Regexp.last_match</a> [compat]</a></dt> <dd> <p>optional な引数が追加されました。</p> </dd> <dt><a name="L006714" id="L006714"><a href="refm055.html#L001340">Regexp#options</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006648" id="L006648"><a href="refm056.html#L001383">String#casecmp</a> [new]</a></dt> <dd> <p>追加。大文字小文字の区別をせずに文字列を比較。</p> </dd> <dt><a name="L006715" id="L006715"><a href="refm056.html#L001415">String#insert</a> [new]</a></dt> <dd> <p>追加</p> <p><code>str[n, 0] = other</code> と同じ(ただし self を返す)</p> </dd> <dt><a name="L006716" id="L006716"><a href="refm058.html#L001496">Symbol.all_symbols</a> [new]</a></dt> <dd> <p>追加 <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12921">ruby-dev:12921</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006717" id="L006717"><em class="XXINVALIDXX">Symbol#intern</em></a></dt> <dd> <p>追加(・・・が、その後削除された)</p> </dd> <dt><a name="L006718" id="L006718"><em class="XXINVALIDXX">SystemCallError.===</em> [new]</a></dt> <dd> <p>追加 (上記 「rescue 節の...」 を参照のこと) <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/12670">ruby-dev:12670</a><sup class="outside"><small>[外部]</small></sup></p> </dd> <dt><a name="L006719" id="L006719"><a href="refm106.html#L002138">SystemExit#status</a> [new]</a></dt> <dd> <p>追加</p> </dd> <dt><a name="L006720" id="L006720"><a href="refm292.html#L005023">TCPSocket.new</a> [compat]</a></dt> <dt><a name="L006721" id="L006721"><a href="refm292.html#L005022">TCPSocket.open</a> [compat]</a></dt> <dd> <p>ローカル側アドレスを省略可能な第3,4引数で指定できるようになりました。</p> </dd> <dt><a name="L006722" id="L006722"><a href="refm059.html#L001536">Thread#keys</a> [new]</a></dt> <dd> <p>追加。Thread固有データのキーの配列を返します。</p> </dd> <dt><a name="L006723" id="L006723"><a href="refm061.html">Time</a> [compat]</a></dt> <dd> <p>負の time_t を扱えるようになりました(OSがサポートしている場合に限る)</p> <pre>p Time.at(-1) => Thu Jan 01 08:59:59 JST 1970</pre> </dd> <dt><a name="L006724" id="L006724"><a href="refm061.html#L001606">Time#to_a</a> [change]</a></dt> <dt><a name="L006725" id="L006725"><a href="refm061.html#L001601">Time#zone</a> [change]</a></dt> <dd> <p>gmtime なタイムゾーンに対して"UTC"を返すようになりました (以前は環境依存。大抵の場合"GMT")</p> </dd> </dl> <hr /> <p class="foottext"> <a name="foottext:1" id="foottext:1" href="#footmark:1"><sup><small>*1</small></sup></a><small>あらい 2003-08-06: できてる・・・?</small><br /> <a name="foottext:2" id="foottext:2" href="#footmark:2"><sup><small>*2</small></sup></a><small>p (1, 2) とすると空白があっても引数を括る括弧になる</small><br /> <a name="foottext:3" id="foottext:3" href="#footmark:3"><sup><small>*3</small></sup></a><small>なんか、うまい書き方ないですかねえ?<a href="http://www.freeml.com/ml_view.php?ml=rubyist&pg=894">rubyist:0894</a><sup class="outside"><small>[外部]</small></sup></small><br /> </p> <hr /> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm543.html">INDEX</a>] [<a href="index.html">TOP</a>][<a href="refm385.html">UP</a>][<a href="refm386.html"><-PREV</a>][<a href="refm388.html">NEXT-></a>]</span></div> </body> </html>