为什么Ruby没有is_an?方法?

时间:2012-02-21 08:24:05

标签: ruby

为什么Ruby没有is_an?方法?例如:

[].is_an? Array?

6 个答案:

答案 0 :(得分:6)

您可以考虑使用is_a?,例如:。

if [].is_a? Array
   puts "Array"
end

如果你真的需要is_an?,你也可以用别名来实现它:

class Object
  alias :is_an? :is_a?
end

if [].is_an? Array
   puts "Array"
end

答案 1 :(得分:5)

我认为您正在寻找的方法是kind_of?

见这里:

http://ruby-doc.org/core-1.9.3/Object.html#method-i-kind_of-3F

答案 2 :(得分:2)

Ruby已经is_a?已经做了你想做的事。如果你愿意,可以在3行代码中创建is_an?,但我认为这是一个坏主意。标准Ruby库中已经有太多的同义词使得它比学习所需的更难。我刚刚了解到Enumerable的地图和收集是一样的。

答案 3 :(得分:1)

Rails维护者Andrew White gave的原因如下:

  

这纯粹是英语的特质,因为很多(大多数?)   Ruby程序员没有以英语为主要语言,   可能不知道,导致混乱。

有关此主题的完整讨论,请参见此请求请求: Improved readability for object introspection (is_a?)

如果有人在Ruby存储库中打开相同的拉取请求,可能会添加它!

答案 4 :(得分:0)

答案 5 :(得分:0)

创建一个is_an?别名初始化程序。

我们最终创建了一个小的初始值设定项,以将该别名添加到我们的项目中,因为我们主要讲英语,并且更喜欢is_an的语法正确性?提供:

config/initializers/is_an.rb

# Aliases `is_an?` to `is_a?` so we correctly use `is_an?( Array )` instead of `is_a?( Array )`
#
# Surprisingly, not in the Ruby core, but it almost made it into the Rails core.
# For the discussion, see https://github.com/rails/rails/pull/6243
#
class Object
  alias is_an? is_a?
end