为什么它是"array.include?object"而不是"object.in?array"?

Abo*_*ove 1 ruby python arrays coding-style

我最近发现在Python中你可以这样做:

array = [1, 2, 3, 4]
if 3 in array:
  print("Yep!")
Run Code Online (Sandbox Code Playgroud)

然后,我心想:"嗯,为什么它在Ruby中有所不同?if 3 in array比它更具可读性if array.include? 3." 然后,我意识到,Ruby是纯OOP,这种方法是基于关键字的.

但是,我仍然在想.如果Python方法不是OOP,为什么Ruby中没有其他更短的方式可读性更强?在思考时,我不认为"此列表是否包含该元素?",但"该元素是否在该列表中?".

我们假设,以下代码是可能的:

array = [1, 2, 3, 4]

if 3.in? array
  print "Yep!
end
Run Code Online (Sandbox Code Playgroud)

我看到它是从一个掉头list.method(element)element.method(list).所以,我想知道:哪些红宝石原则/规则反对上面提到的代码?

编辑:糟糕,我写了"基于键盘",但当然意味着"基于关键字".要强调这一点:我不是在寻找行为类似于in的方法?方法; 我正在寻找它没有以这种方式在Ruby中实现的原因.

Mar*_*off 7

哪些红宝石原则/规则反对上述代码?

它不是Ruby原则,而是封装的一般OOP原则:Fixnum类不需要知道有关数组的任何信息.但是,因为Array的主要职责是包含对象的集合,#in?或者#include?显然属于Array的责任.