开发者

What monkeypatch creates the private method split?

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>'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜