【发布时间】:2012-04-23 20:03:20
【问题描述】:
我正在努力解决以下问题:
$ rails c
Loading development environment (Rails 3.2.1)
irb(main):001:0> 2.class
=> Fixnum
irb(main):002:0> Fixnum === 2
=> true
irb(main):003:0> 2.hours.class
=> Fixnum
irb(main):004:0> Fixnum === 2.hours
=> false
irb(main):005:0>
我想测试某个指定参数是符号还是时间跨度。我认为 Ruby/Rails 中的自然方式是:
case param
when :today then
# do this...
when Fixnum then
# do that...
else
raise ArgumentError ...
end
据我所知,ActiveSupport 的源代码=== 没有被 Fixnum 覆盖。那么,我做错了什么?
【问题讨论】:
-
基于变量的实际类的切换行为通常不受欢迎,因为它破坏了duck typing,这是一种非常棒的编程方式,您不应该通过过度急切的类型检查将其丢弃。请记住:大多数时候类型是无关紧要的。重要的是提供的界面和行为。
标签: ruby-on-rails ruby time operator-overloading case