为什么Ruby没有is_an?方法?

3
为什么 Ruby 没有一个名为 is_an? 的方法?例如:
[].is_an? Array?

请点击此处查看相关编程文档。 - xdazz
7
有趣的是,在应该用 an 的地方你打成了 a,但现在你正在寻找 an 而不是已经存在的 a - sawa
2
有时像这样的小工具最终会出现在Ruby on Rails的ActiveSupport库中。有人试图将其添加,但未被维护者采纳:https://github.com/rails/rails/pull/6243。 - DannyRosenblatt
6个回答

7
你可以考虑使用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

5

3
Rails维护者Andrew White在此处给出了如下理由:

这是一种纯粹的英语特异性,由于许多(大多数?)Ruby程序员并非以英语为母语,他们可能不知道这一点,从而导致混淆。

请参阅此pull request以获取完整的讨论内容。
如果有人在Ruby存储库中开启同样的pull request,也许它会被添加!

2

Ruby已经有is_a?方法可以满足你的需求。如果你想要,你可以用三行代码编写is_an?方法,但我认为这是一个坏主意。标准Ruby库中已经有太多的同义词了,这使得学习变得比必要的更加困难。我最近才学会Enumerable的map和collect是相同的。


2
我个人认为这不会有任何害处。它有助于编写更易读的代码。 - Sergio Tulentsev
你可以在一行中使用别名。 - three

2

创建一个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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接