Python 这是为什么;包括?“对象”;而不是",;反对吗?数组";?

Python 这是为什么;包括?“对象”;而不是",;反对吗?数组";?,python,ruby,arrays,coding-style,Python,Ruby,Arrays,Coding Style,我最近发现,在Python中,可以执行以下操作: array = [1, 2, 3, 4] if 3 in array: print("Yep!") 然后,我想:“嗯,为什么在Ruby中它会有所不同呢?如果数组中的3比数组中的可读性更强。include?3”然后,我意识到Ruby是纯OOP的,这种方法是基于关键字的 但我还是想知道。如果Python方法不是OOP,为什么在Ruby中不能有另一种更具可读性的、更短的方法呢?在思考时,我不认为“这个列表包括那个元素吗?”,而是“这个元素在那个列

我最近发现,在Python中,可以执行以下操作:

array = [1, 2, 3, 4]
if 3 in array:
  print("Yep!")
然后,我想:“嗯,为什么在Ruby中它会有所不同呢?
如果数组中的3比数组中的
可读性更强。include?3
”然后,我意识到Ruby是纯OOP的,这种方法是基于关键字的

但我还是想知道。如果Python方法不是OOP,为什么在Ruby中不能有另一种更具可读性的、更短的方法呢?在思考时,我不认为“这个列表包括那个元素吗?”,而是“这个元素在那个列表中吗?”

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

array = [1, 2, 3, 4]

if 3.in? array
  print "Yep!
end
我看到这是从
list.method(element)
element.method(list)
的转变。 因此,我想知道:哪些ruby原则/规则反对上述代码

编辑:哎呀,我写的是“基于键盘”,当然是“基于关键字”。要强调这一点:我不是在寻找像in?方法;我正在寻找为什么它没有以Ruby那样实现的原因。

在rails(主动支持)中,
中有一个助手
,它的工作方式与您想要的完全一样

require 'active_support/core_ext'

3.in?([1, 2, 3]) # => true
在rails(active_support)中,在?
中有一个助手
,它的工作方式与您想要的完全相同

require 'active_support/core_ext'

3.in?([1, 2, 3]) # => true

从OO的角度来看,这是有意义的,因为
include?
Array
的一种方法,而不是其他任何方法(或
对象


Python变体看起来只是一种形式。

从面向对象的角度来看,这是有意义的,因为
包含?
是一种
数组的方法,而不是任何其他方法(或
对象

Python变体看起来只是一种形式的

哪些ruby原则/规则反对上述代码

这不是Ruby原则,而是封装的一般OOP原则:Fixnum类不需要了解任何关于数组的知识。然而,由于数组的主要职责是包含对象的集合,因此
#in?
#include?
显然属于数组的职责范围

哪些ruby原则/规则反对上述代码


这不是Ruby原则,而是封装的一般OOP原则:Fixnum类不需要了解任何关于数组的知识。然而,由于数组的主要职责是包含对象的集合,因此
#in?
#include?
显然属于数组的职责范围。

您的最后一句话解释了您看到的问题:您认为应该能够询问对象是否存在于数组中,这毫无意义。它如何知道如何搜索数组或类似数组的对象


把它转过来是有意义的:“这个数组包含对象吗?”。数组或类似数组的对象知道如何搜索自身,可以尝试将对象与数组中的元素进行比较。

您的最后一句话解释了您看到的问题:您认为应该能够询问对象是否存在于数组中,这没有意义。它如何知道如何搜索数组或类似数组的对象

把它转过来是有意义的:“这个数组包含对象吗?”。数组或类似数组的对象知道如何搜索自身,可以尝试将对象与数组中的元素进行比较。

(我没有Python方面的经验,所以我只是在转发我在internet上读到的内容。)

中的
是Python中的运算符,而不是方法

Python有成员操作符,用于测试 序列,例如字符串、列表或元组。有两名成员 操作人员解释如下:

中的
如果在指定序列中找到变量,则计算结果为true
否则就错了

不在
如果在 指定顺序,否则为false

我是一个红宝石新手;我不知道有任何Ruby原则会阻止在数组之前编写对象。

(我没有Python经验,所以我只是在转述我在互联网上读到的东西。)

中的
是Python中的运算符,而不是方法

Python有成员操作符,用于测试 序列,例如字符串、列表或元组。有两名成员 操作人员解释如下:

中的
如果在指定序列中找到变量,则计算结果为true
否则就错了

不在
如果在 指定顺序,否则为false


我是一个红宝石新手;我不知道有任何Ruby原则会阻止在数组之前写入对象。

我认为Mark最好地回答了您的问题,出于您的目的,
case
语句具有反转关系的效果,除非您处理的是module、regex等元素:

array = [1, 2, 3, 4]

case 3; when *array
  do_something
end

我认为Mark最能回答您的问题,出于您的目的,
case
语句具有颠倒关系的效果,除非您处理的是module、regex等元素:

array = [1, 2, 3, 4]

case 3; when *array
  do_something
end

我曾经问过这个问题!:)@SergioTulentsev,你知道,“基于键盘”而不是“基于鼠标”。更清楚的是,不管你是喜欢Python方法还是Ruby方法,这里并不是说“Python方法不是OOP”,不管这意味着什么。一种语言是否有某种语法连接到右侧对象的方法中——比如
\uuuuuu包含\uuuuuu
——与或多或少的面向对象无关。我认为你的第二个代码在任何意义上都是不可能的。你不能在一个字符串文字中间结束一个脚本。我曾经问过这个问题!塞尔吉奥图兰采夫,你知道吗