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も見えないなぁ.privateだからだった.methodsではprivateは出てこない罠.Kernel.methods(false)
にはあるけど.
と思っていたら,prelude.rbでトップレベルdefで定義されていた.トップレベルでdefするとmethodsには現れないのか?
リファレンスマニュアルにはmodule functionと書いてあるのに,ただのprivateメソッドというのはどういうことだろう.
そういえば,相変わらずmake testで失敗する.