【发布时间】:2016-08-30 01:31:26
【问题描述】:
我来自 Lua 和 Python 两种语言,它们都将它们的字符串值视为对象。我只是想知道,是字符串值实际上被认为是对象吗?我的意思是,在 Lua 中你可以配置它们的元表并在它们上使用方法,而在 Python 中你可以直接说类似print("".format)
另一个示例(在 Lua 中)可能是向字符串值添加方法,如下所示:
#Prototype object
local proto = {}
function proto:print()
print(self) -- "self" will be the string
end
#String's metatable
local mt = getmetatable("")
local index = mt.__index
#Direct nil references to the prototype object
setmetatable(index, { __index = proto })
#Create a string
local str = "hello"
str:print() #Call it's method
如预期的那样,一旦调用了“print”,上面的代码就会将字符串打印到输出窗口。那么字符串值对象和 Lua 中的任何其他数据结构一样吗? Python 和其他语言也一样吗? 除了它们是不同的数据类型之外,字符串对象和语言中的其他对象之间是否有任何显着差异?
感谢您的宝贵时间!
【问题讨论】:
-
“以及其他语言” - 不。一方面,并非所有语言都是面向对象的;所以“字符串是一个对象”对他们来说甚至没有意义。有些语言甚至没有字符串的概念(C 是一个显着的例子)。即使在 OO 语言中,也不一定是这样:例如,在 JavaScript 中,字符串是原始的,而不是对象,但如果您尝试对其使用方法,它会自动强制转换为对象包装器
String. -
一般 str 是一个内置类型,不能附加新属性(例如,不,你不能向它添加新方法)......但是有像
forbiddenfruit这样的东西可以让你@ 987654325@ 具有新属性的内置函数 -
@William:定义“对象”。该术语具有您在此处给出的更多含义。不同的语言赋予这个词不同的含义。
-
你给出的 Lua 元方法示例很有趣。您实际上是将方法添加到“类”,而不是对象。
标签: python string oop object lua