From: GOTO Kentaro Date: 2002-07-26T07:23:15+09:00 Subject: Re: [PATCH] object.c ruby.h (fwd) At Fri, 26 Jul 2002 05:34:10 +0900, Dave Thomas wrote: > If you call Regexp#match with a non-string argument, it calls that > argument's to_str method to coerce it into a string. > > So, perhaps, if the expression to pass to 'if', 'while', and friends > isn't 'true' or 'false', the interpreter should call #truth? on it to > coerce it into a truth value.[1] Oops! Sorry, I misunderstood that `and' or `or' treat conditions as same as `if' or `while' do. Now I agree your opinion but would like to withdraw proposition to introduce anything built-in to obtain truth value for each object. The truth is not simple indeed. % ruby17 -e '$_ = "foo"; /x/ or puts :pass' % ruby17 -e '$_ = "foo"; puts :pass unless /x/' pass % ruby17 -v ruby 1.7.2 (2002-07-13) [i386-freebsd4.5] By the way, how about asking the auther to fit the behavior of RubyUnit's assert() to Test::Unit's? % ruby ~/foo.rb Test::Unit ------------------------------ Loaded suite TestTU Started... . Finished in 0.003085 seconds. 1 runs, 1 assertions, 0 failures, 0 errors RubyUnit ------------------------------ TestRU#test_x E. Time: 0.177137 FAILURES!!! Test Results: Run: 1/1(1 asserts) Failures: 0 Errors: 1 Errors: 1 /home/gotoken/foo.rb:21:in `test_x'(TestRU): 1st argument <1> type should be TrueClass or FalseClass. (TypeError) from /home/gotoken/foo.rb:25 % cat ~/foo.rb puts "Test::Unit ------------------------------" require "test/unit" require "test/unit/ui/console/testrunner" class TestTU < Test::Unit::TestCase def test_x assert(1) end end Test::Unit::UI::Console::TestRunner.run(TestTU) puts "RubyUnit ------------------------------" require "runit/testcase" require "runit/cui/testrunner" class TestRU < RUNIT::TestCase def test_x assert(1) end end RUNIT::CUI::TestRunner.run(TestRU.suite) % -- Gotoken