The questions Ruby: Private method called for 3:Fixnum and private method `split' called for nil:NilClass (NoMethodError) mention private methods split
for Fixnum
and NilClass
objects respectively.
Is this private split
method a monkeypatched pseudo-keyword (like pr开发者_如何学Pythonint
and puts
)? If so, what added it, and why did they use a method name that already exists for String
?
You can solve this yourself (even without reading the other answer):
ruby-1.8.7-p330 :001> 3.method(:split)
#=> #<Method: Fixnum(Kernel)#split>
You can see from my Ruby Method Lookup Flow (PDF version) that methods for all objects finish at the instance methods of Object
…which itself includes Kernel
. Thus, all instance methods of Kernel
(added many cases to be available as top-level convenience methods) also end up as methods on every object.
Note that this is not true in 1.9+ as Kernel#split
has been removed:
ruby-1.9.1-p378 :001> 3.method(:split)
#=> NameError: undefined method `split' for class `Fixnum'
#=> from (irb):1:in `method'
#=> from (irb):1
#=> from /Users/phrogz/.rvm/rubies/ruby-1.9.1-p378/bin/irb:16:in `<main>'
精彩评论