Python 这是为什么;包括?“对象”;而不是",;反对吗?数组";?
我最近发现,在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中不能有另一种更具可读性的、更短的方法呢?在思考时,我不认为“这个列表包括那个元素吗?”,而是“这个元素在那个列
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
——与或多或少的面向对象无关。我认为你的第二个代码在任何意义上都是不可能的。你不能在一个字符串文字中间结束一个脚本。我曾经问过这个问题!塞尔吉奥图兰采夫,你知道吗