ruby1.9.2-preview1入れてみた

NEWSに書いてあるメソッドが入ってない気がするんだけど気のせいだろうか.

<<EOL
Array#sort_by!
Dir.home
Enumerable#join
Enumerable#chunk
Enumerable#slice_before
Enumerator#peek
Enumerator#next_values
Enumerator#peek_values
Enumerator#feed
StopIteration#result
IO#fdatasync
MatchData#==
Time#to_r
Kernel#require_relative
Method#parameters
UnboundMethod#parameters
Proc#parameters
EOL
.each_line {|str|
  str.chomp!
  printf("%-24s -> %s\n",
         str,
         case str
         when /^(.+)\.(.+)$/
           Object.const_get($1).respond_to?($2)
         when /^(.+)\#(.+)$/
           Object.const_get($1).instance_methods.include?($2.to_sym)
         else
           raise "hoge"
         end ? "yes" : "no")
}
$ ruby19 -v 1.9.2-methods.rb
ruby 1.9.2dev (2009-07-18 trunk 24186) [i386-darwin9.8.0]
Array#sort_by!           -> yes
Dir.home                 -> yes
Enumerable#join          -> yes
Enumerable#chunk         -> no
Enumerable#slice_before  -> no
Enumerator#peek          -> no
Enumerator#next_values   -> no
Enumerator#peek_values   -> no
Enumerator#feed          -> no
StopIteration#result     -> no
IO#fdatasync             -> yes
MatchData#==             -> yes
Time#to_r                -> yes
Kernel#require_relative  -> no
Method#parameters        -> yes
UnboundMethod#parameters -> yes
Proc#parameters          -> yes

あと,require_relativeは呼べるのに,どこに定義されているのかわからない.

p method(:require)               # => #<Method: Object(Kernel)#require>
p method(:require_relative)      # => #<Method: Object#require_relative>
p Object.instance_methods(false) # => []
p methods(false).sort            # => [:include, :private, :public, :to_s]
p Kernel.instance_methods(false).sort
# => [:!~, :===, :=~, :__id__, :class, :clone, :define_singleton_method, :display, :dup, :enum_for, :eql?, :extend, :freeze, :frozen?, :gem, :hash, :inspect, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :method, :methods, :nil?, :object_id, :private_methods, :protected_methods, :public_method, :public_methods, :public_send, :respond_to?, :send, :singleton_methods, :taint, :tainted?, :tap, :to_enum, :to_s, :trust, :untaint, :untrust, :untrusted?]

さらに,Kernel.require_relativeはない.require_relativeはKernelのモジュール関数ではないようだ.

Kernel.require_relative("hoge")
# => -:1:in `<main>': private method `require_relative' called for Kernel:Module (NoMethodError)

時々,こういうどこで定義されているか分からないメソッドがあるような気がする.よく見たら,requireも見えないなぁ.Kernel.methods(false) にはあるけど.
と思っていたら,prelude.rbでトップレベルdefで定義されていた.トップレベルでdefするとmethodsには現れないのか?
privateだからだった.methodsではprivateは出てこない罠.
リファレンスマニュアルにはmodule functionと書いてあるのに,ただのprivateメソッドというのはどういうことだろう.


そういえば,相変わらずmake testで失敗する.