Rubyで「1 < x < 10 」みたいな書き方をしてみる
Pythonみたく
if 1 < x < 10 puts "#{x}は1から10の間!" else puts "#{x}は1から10の間じゃない" end
みたいにかけるようにしてみた。
「1 < x < 10 < y < 100」みたいに続けてもOK
但し、返ってくるのは、数字 か false 。
Range使うより少し楽?
#pyltgt.rb class FalseClass def < (v); false end def > (v); false end def <= (v); false end def >= (v); false end # def =~ (v); false end end [Fixnum, Bignum, Float].each do |klass| klass.class_eval do alias_method(:pylg_old_lt, :<) alias_method(:pylg_old_gt, :>) alias_method(:pylg_old_elt, :<=) alias_method(:pylg_old_egt, :>=) def < (v); v && pylg_old_lt(v) ? v : false end def > (v); v && pylg_old_gt(v) ? v : false end def <= (v); v && pylg_old_elt(v) ? v : false end def >= (v); v && pylg_old_egt(v) ? v : false end # def =~ (v); v && self.==(v) ? v : false end end end if $0 == __FILE__ require 'test/unit' class TC_Test < Test::Unit::TestCase def test_test assert_equal false, 1 < 1 assert_equal false, 1 < 1 assert_equal 2, 1 < 2 assert_equal 1, -1 < 0 < 1 assert_equal 1, -1 <= 0 < 1 assert_equal 1, -1 <= 0 <= 1 assert_equal 1, -1 <= 1 <= 1 assert_equal false, -1 <= 1 > 1 assert_equal 1, -1 <= 2 > 1 assert_equal 2, -1 <= 2 >= 2 assert_equal false, 3 <= 2 <= 3 # assert_equal false, 1 < 2 =~ 3 # assert_equal false, 1 < (2 =~ 3) < 4 # assert_equal 4, 1 < (2 =~ 2) < 4 # assert_equal 4, 1 < 2 =~ 2 < 4 # 演算子の優先順位の関係で fail end end end