[TOP][UP][<-PREV][NEXT->]

ruby 1.7 feature

ruby version 1.7 は開発版です。以下にあげる機能は将来削除されたり互換 性のない仕様変更がなされるかもしれません。

benchmark.rb

added

abort

終了メッセージを指定できるようになった。

getopts.rb *ドキュメント未反映*

refine. ruby-dev:16193, ruby-dev:16213

GDBM *ドキュメント未反映*
DBM *ドキュメント未反映*
SDBM *ドキュメント未反映*

ruby-dev:16126

Module#include
Object#extend *ドキュメント未反映*

複数のモジュールを渡したときにインクルードされる順序が変更されました。 ruby-dev:16035 extend も同様だそうです。ruby-dev:16183

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]

一つ一つ include した場合とは逆順になります。

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]
UNIXSocket.pair([type[, protocol]])
UNIXSocket.socketpair([type[, protocol]])
UNIXSocket#recv_io([klass[, mode]])
UNIXSocket#send_io(io)

追加

Proc#yield *ドキュメント未反映*

ruby-bugs-ja:PR#98

Array#pack, String#unpack

pack/unpack のテンプレートにコメントを記述できるようになりました。

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"
true/false/nil の特異メソッド定義

これら疑似変数に特異メソッドが定義できるようになりました。

class <<true
  def foo
   "foo"
  end
end
p true.foo
=> -:1: no virtual class for true (TypeError)
   ruby 1.6.6 (2001-12-26) [i586-linux]

=> ruby 1.7.2 (2002-02-20) [i586-linux]
   "foo"
LocalJumpError#exitstatus

追加

def foo
  proc { return 10 }
end

begin
  foo.call
rescue LocalJumpError
  p $!.exitstatus
end

=> ruby 1.7.2 (2002-02-14) [i586-linux]
   10
UNIXServer#listen(backlog)
TCPServer#listen(backlog)

追加。Socket#listenと同じ。

Time#getgm
Time#getlocal
Time#getutc
Time#gmt_offset
Time#gmtoff
Time#utc_offset

追加

Module#<=>

継承関係のないクラス/モジュール同士の比較で例外があがるようになりま した。

p Array <=> String

=> ruby 1.6.6 (2001-12-26) [i586-linux]
   1

=> -:1:in `<=>': non related class/module (ArgumentError)
           from -:1
   ruby 1.7.2 (2002-02-14) [i586-linux]
IO#fsync

追加

Array#pack, String#unpack

64 bit 整数のテンプレート文字 Q/q が追加されました(Quad の意)。 Q は unsigned、q は、signed です。 perl と異なり 64 bit 整数をサポートしないプラットフォームでも 使用できます。

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]
Method#inspect

特異メソッドに対する出力形式がより意味のあるものになりました。 ruby-bugs-ja:PR#193

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>
Array.new(size) { ... }
Array#fill { ... }

ブロックの評価結果を fill する値として指定できるようになりました。ブ ロックは要素毎に評価されるので、下のような例では "val" が毎回生成さ れます。

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]
File::Stat#rdev_major
File::Stat#rdev_minor

追加

s = File.stat("/dev/null")
p s.rdev_major
p s.rdev_minor

=> ruby 1.7.2 (2002-01-28) [i686-linux]
   1
   3
Hash#update

ブロックを指定できるようになりました。重複したキーに対する振舞いを制 御できます。

Object#clone

Numeric など immutable なオブジェクトは clone できなくなりました。 ruby-bugs-ja:PR#94, rubyist:0831

$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]
Proc

汚染された Proc は、ブロックにできなくなる(かも) ruby-dev:15682

String#to_i(base=10)

引数に基数(2,8,10,16)を指定できるようになりました。

p "010".to_i(16)
=> ruby 1.7.2 (2002-01-11) [i586-linux]
   16
Hash.new {|hahs, key| ... }

ハッシュのデフォルト値としてブロックを指定できるようになり ました。ブロックを指定すると空のハッシュ要素の参照に対して その都度ブロックを実行し、その結果を返します。 ブロックにはハッシュ自身と、ハッシュを参照したときのキーが渡されます

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]
Array#select
Hash#select
ENV.select

追加

# ブロックを与えなかった場合は、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"]]
MatchData#select

追加。

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"]
String#match(re)

追加 re.match(str) と同じ。

Module#initialize

Module.new, Class.new でブロックが与えられた場合、生成した モジュール/クラスのコンテキストでブロックを実行するように なりました。

trap
trace_var

第二引数に汚染された文字列を渡すと例外 SecurityError が 起こるようになりました。1.6 では、汚染された文字列をセーフレ ベル4で評価するようになっていました。 ruby-list:32215

puts
Array#to_s

puts は、配列を特別扱いしなくなり、Array#to_s が出力されるようになりました。Array#to_s は、 デフォルトで間に改行を挟んだ文字列を出力するように変更され たため挙動に違いはありません(ただし $, の 値に影響されます)。ruby-dev:15043

この変更は、まだ試験的ですが元に戻りそうな気配。。。ruby-dev:15313

$, = ","
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

・・・元に戻ったようです。

=> ruby 1.7.2 (2001-12-10) [i586-linux]
   foo
   bar
   baz
Integer#to_s(base=10)

引数に基数を指定できるようになりました。

p 10.to_s(16)
=> ruby 1.7.2 (2001-11-25) [i586-linux]
   "a"
String#chomp
String#chomp!
chomp
chomp!

$/ が "\n" (デフォルト)のとき、どの行末形式("\r\n", "\r", "\n" のいずれでも)でもそれらを取り除くようになりました。

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"
Complex

Complex#to_i, #to_f, #to_r はなくなりました。 ruby-bugs-ja:PR#102, rubyist:0879

メソッド呼び出し

メソッド名と括弧の間に空白があるとその括弧は引数を括る括弧ではなく 式の括弧と解釈するようになりました。 *1 *2

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
Marshal

構造体クラスのサブクラスをダンプしたものがロードできませんでした。 ruby-bugs-ja:PR#104

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>
alias

グローバル変数のエイリアスが効いていませんでした。 ruby-dev:14922

$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]
Module.new

ブロックを持てるようになりました。ブロックの実行は module_eval と同じように、そのモジュール/クラスのコンテキ スト(self が そのモジュール/クラス)で実行されます

Module.new {|m| p m}

=> ruby 1.7.1 (2001-10-15) [i586-linux]
   #<Module:0x401afd5c>
String#[re, idx]
String#[re, idx] = val

追加

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"

str[/re/, 0] は、str[/re/] と同じです。

Array.new(ary)

Array.new の引数に配列を渡すとそのコピーを生成するようになりました。

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
String.new

String.new の引数を省略できるようになりました。

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]
   ""
Dir#path

追加

p Dir.open(".").path
=> ruby 1.7.1 (2001-10-05) [i586-linux]
   "."

〜この間、空白期間〜

Readline

Readline.readline 実行中に Ctrl-C により中断した後でも、端末状態を 復帰するようにしました。ruby-dev:14574

Precision.included

追加(Module#included の再定義)

Signal モジュール

追加。

while, until, class, def の値

while, until, class, def が式として値を返すようになりました。

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

while/until は途中で nil を返すように修正されました。 ruby-dev:15909

=> -: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
Range#===

文字列の範囲オブジェクトと文字列との比較を行う場合に、 以前は範囲の両端と比較していましたが、String#upto により1要素ずつ 比較を行うようになりました。

p(("a" .. "ab") === "aa")
=> ruby 1.7.1 (2001-08-20) [i586-linux]
   true
=> ruby 1.7.1 (2001-08-23) [i586-linux]
   false
Enumerable#sort_by

追加。ruby-dev:8986以降で提案された Schwartzian transform を行うための sort です。

Curses

Updated. New methods and constants for using the mouse, character attributes, colors and key codes have been added.

Range#step([step=1])

追加。step ごとの要素で繰り返します。

条件式中の正規表現リテラル

条件式中の正規表現リテラルは警告が出るようになりました。

$_ との正規表現マッチは、明示的に ~/re/ (単項の ~ メソッ ド)などとすることが推奨されます。

$_ = "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"
String#lstrip, rstrip, lstrip!, rstrip!

追加。左端あるいは右端の空白類を取り除きます。

Socket::pack_sockaddr_in(), Socket::unpack_sockaddr_in()

追加。ソケットアドレス構造体(INET domain)のpack/unpack。

Socket::pack_sockaddr_un(), Socket::unpack_sockaddr_un()

追加。ソケットアドレス構造体(UNIX domain)のpack/unpack。

String#casecmp

追加。アルファベットの大小を無視した文字列比較。

String#eql?

$= の値に関らず常にアルファベットの大小を区別するよ うになりました。

Module#include?

Added. ruby-dev:13941

Dir::chdir

Changed to warn only when invoked from multiple threads or no block is given. ruby-dev:13823

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
Proc#yield

追加 ruby-dev:13597

引数の数をチェックしない点を除けば Proc#call と同じです。

File.fnmatch(pattern, path[, flag])
File.fnmatch?(pattern, path[, flag])

追加

このメソッドで使用するフラグ FNM_NOESCAPE, FNM_PATHNAME, FNM_PERIOD, FNM_CASEFOLD もFile::Constants モジュールに定義されました。

p %w(foo bar bar.bak).reject! { |fn| File::fnmatch?("*.bak", fn) }
=> ruby 1.7.1 (2001-06-12) [i586-linux]
   ["foo", "bar"]
Method#==

追加

多重代入

多重代入の規則を見直しました。変更は以下の点だけです。

#
*a = nil
p a
=> ruby 1.7.1 (2001-06-05) [i586-linux]
   [nil]
=> ruby 1.7.1 (2001-06-12) [i586-linux]
   []
配列展開

以下の挙動を修正しました。

a = *[1]
p a #=> [1]

現在は、1要素の配列も正常に展開されます。

a = *[1]
p a #=> 1
NameError & NoMethodError

NameError を StandardError のサブクラスに戻しました。 クラス階層は以下のようになりました。

NoMethodError < NameError < StandardError.
File.open

第2引数を数値(File::RDONLY|File::CREATとか)で指定した場合に限り、第3 引数を用いていましたが、第3引数が与えられれば常に有効にするように しました。 ruby-bugs-ja:PR#54

Marshal

無名のクラス/モジュールは dump できないようになりました。

p Marshal.dump(Class.new)

=> ruby 1.6.4 (2001-06-04) [i586-linux]
   "\004\005c\031#<Class 0lx401a6b44>"

=> -:1:in `dump': can't dump anonymous class #<Class 0lx401a73dc> (ArgumentError)
        from -:1
   ruby 1.7.1 (2001-08-24) [i586-linux]

*3

モジュールのロードの型チェックに誤りがありました。この変更によりdump フォーマットのマイナーバージョンが1あがりました

p Marshal.dump(Object.new).unpack("CC").join(".")
    => ruby 1.6.4 (2001-06-04) [i586-linux]
       "4.5"
p Marshal.dump(Object.new).unpack("CC").join(".")
    => ruby 1.6.4 (2001-06-11) [i586-linux]
       "4.6"
constants

内部のハッシュテーブルを使用することにより定数参照の速度を改善したそうです。 (ChangeLogの

Tue Jun  5 16:15:58 2001  Yukihiro Matsumoto  <matz@ruby-lang.org>

に該当するようです)

文法

以下のようなコード(pの後の空白に注意)

p ("xx"*2).to_i

は、

(p("xx"*2)).to_i

ではなく

p (("xx"*2).to_i)

とみなすようになりました(これはまだ実験的な変更です)。

Range#to_ary

追加。これにより(配列への暗黙の変換が適用されるので)以下のように書く ことができます。

a, b, c = 1..3
break and next

break, next は、引数を指定することでイテレータや yield の値を返す ことができるようになりました。(この機能はまだ実験です)

break [n] はイテレータを終了させ、n がそのイテレータの返り値になります。 next [n] はブロックを抜け、n が yield の返り値になります。

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"
to_str

to_str を定義したオブジェクトはより広範囲にStringとして振舞うように なりました。

文字列を引数に取るほとんどの組込みメソッドは、to_str による暗黙の 型変換を試みます。

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]
範囲演算子式中のリテラル

範囲演算子式中の単独の数値リテラルが $. と比較されるのは -e オプションによる1行スクリプトの中だけになりました。

rescue 節の例外クラスと発生した例外オブジェクトの比較

発生した例外 $! と rescue 節の例外クラスとは Module#=== を使って比較するようになりました。

以前は kind_of? による比較なので基本的な動作に変わりはありませんが、 SystemCallError.=== は特別に errno が一致する例外を同じと見なすよう に再定義されました。これにより、例えば Errno::EWOULDBLOCK と Errno::EAGAIN が同じ意味(同じerrno)の場合にどちらを指定しても rescue できるようになりました。

Array#collect
Array#map

Array#collect がブロックを伴わない場合に self.dup を返していました。 そのため、Array 以外を返すことがありましたruby-list:30480

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
Array#dup

dup のバグ修正 ruby-list:30481

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
Array#fetch

追加

Array#insert(n, other, ...)

追加 ruby-talk:14289

ary[n,0] = [other,...] と同じ(ただし self を返す)

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
Array#pack
String#unpack

Array#pack, String#unpack のテンプレート文字 "p", "P" は、nil と NULLポインタの相互変換を行うようになりましたruby-dev:13017

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]
Array#sort!

常にself返すようになりました。

将来にわたってこのことが保証されるわけではないそうです ruby-dev:12506

Class.inherited

(注: Class#inherited ではありません)

以前は、クラスのサブクラスの定義を禁止するために定義されていましたが、 (TypeError例外を発生させるメソッドとして定義されていました) こ の役割は Class.new が担保するようになりました。そのため、 Class.inherited メソッドの定義はなくなりました。

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]
Dir.open

ブロックを伴う場合File.openと同様に、ブロックの結果がメソッドの 戻り値になりました。(1.6以前は nil 固定)

Dir.chdir

ブロックを指定できるようになりました。

Dir.glob

先行するバックスラッシュにより、ワイルドカードをエスケープ できるようになりました。 また、空白類に特殊な意味はなくなりました('\0'の効果は残っています)。

Enumerable#all?
Enumerable#any?
Enumerable#inject

追加

File.lchmod
File.lchown

追加

IO.for_fd

追加

IO.read

追加。ruby-talk:9460が実装に至った経緯だと思う

Interrupt

Interrupt は、SignalExceptionのサブクラスになりました。 (1.6以前はExceptionのサブクラス)

Marshal::MAJOR_VERSION
Marshal::MINOR_VERSION

追加。Marshal が出力するダンプフォーマットのバージョン番号です。 ruby-dev:14172

MatchData#to_ary

追加 ruby-dev:12766

Regexp#match の利便のために用意されました。以前は、

foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz").to_a[1..-1]
p [foo, bar, baz]

とする必要がありましたが、これにより

_, foo, bar, baz = /(\w+?)\s+(\w+?)\s+(\w+)/.match("foo bar baz")
p [foo, bar, baz]

とすることができます。

Math.acos(x)
Math.asin(x)
Math.atan(x)
Math.cosh(x)
Math.sinh(x)
Math.tanh(x)
Math.hypot(x,y)

追加

Module#included

追加。Module#append_feature の後に呼ばれるhook

Module#method_removed
Module#method_undefined

追加

Numeric#/(other)

追加。商を返します。

NoMethodError

追加 ruby-dev:12763

NotImplementError

旧称は削除されました。NotImplementedErrorを使ってください

Object#singleton_method_removed
Object#singleton_method_undefined

追加

Object#singleton_methods([all])

省略可能な引数 all が追加されました。

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"]
Process.times

Time.times から移動しました。 (Time.times も残っていますが、warningが出ます)

Process::Status

追加。$? の値も整数からこのクラスのインスタンスになりました。

Process.waitall

追加

Range#include?
Range#member?

追加

Range#to_ary

追加。to_a と同じ

Regexp.last_match(n)

optional な引数が追加されました。

Regexp#options

追加

String#casecmp(other)

追加。大文字小文字の区別をせずに文字列を比較。

String#insert(n, other)

追加

str[n, 0] = other と同じ(ただし self を返す)

Symbol.all_symbols

追加 ruby-dev:12921

Symbol#intern

追加

SystemCallError.===

追加 (上記 「rescue 節の...」 を参照のこと) ruby-dev:12670

SystemExit#status

追加

TCPSocket.new
TCPSocket.open

ローカル側アドレスを省略可能な第3,4引数で指定できるようになりました。

Thread#keys

追加。Thread固有データのキーの配列を返します。

Time

負の time_t を扱えるようになりました(OSがサポートしている場合に限る)

p Time.at(-1)
=> Thu Jan 01 08:59:59 JST 1970
Time#to_a
Time#zone

gmtime なタイムゾーンに対して"UTC"を返すようになりました (以前は環境依存。大抵の場合"GMT")

以下、未検証 (ruby-dev:13476 まだ仕様が確定してないらしい。メモの 意味も込めてそのまま残します。ruby-dev:14601, ruby-dev:15927 も参照)

Sat Feb 24 03:15:49 2001  Yukihiro Matsumoto  <matz@ruby-lang.org>

       * io.c (set_stdin): preserve original stdin.

       * io.c (set_outfile): preserve original stdout/stderr.

*1p (1, 2) とすると空白があっても引数を括る括弧になる
*2なんか、うまい書き方ないですかねえ?rubyist:0894
*3以下は 1.6 へ


[TOP][UP][<-PREV][NEXT->]