From: "mame (Yusuke Endoh)" Date: 2013-11-23T10:14:37+09:00 Subject: [ruby-core:58514] [ruby-trunk - Feature #9123] Make Numeric#nonzero? behavior consistent with Numeric#zero? Issue #9123 has been updated by mame (Yusuke Endoh). avit (Andrew Vit) wrote: > 42.nonzero? #=> 42 > 0.nonzero? #=> false In fact, the first version of nonzero? returned self or false. Inaba, in [ruby-dev:6417] (22 Mar 1999), suggested a convention about the usage of nil and false. * if a method returns only a boolean, it should use true and false * if a method returns a general object but also "false" value, it should use nil Matz accepted it, and adopted the convention to another exception, defined?. As far as I know, this is the only spec change of nonzero? ever. Inaba pointed out that a method whose name ends with "?" would make a user feel that it should return only a boolean, though he also admitted that it is difficult to change because of compatibility issue (in 1999). Matz agreed, and said that "?" is a symbol that is "mainly used as a predicate". -- Yusuke Endoh ---------------------------------------- Feature #9123: Make Numeric#nonzero? behavior consistent with Numeric#zero? https://bugs.ruby-lang.org/issues/9123#change-43094 Author: sferik (Erik Michaels-Ober) Status: Open Priority: Normal Assignee: Category: Target version: Numeric#zero? returns true or false, while Numeric#nonzero? returns self or nil. I've written a patch that fixes this inconsistency and adds a Numeric#nonzero (non-predicate) method that returns self or nil for chaining comparisons. I'd like for this to be included in Ruby 2.1.0. https://github.com/ruby/ruby/pull/452.patch -- http://bugs.ruby-lang.org/