字符串通常被认为是对象?

时间:2016-08-30 01:31:26

标签: python string oop object lua

我来自Lua和Python的语言,两者都将其字符串值视为对象。我只是想知道,字符串值实际上被视为对象?我的意思是,在Lua中你可以配置他们的metatables并使用它们的方法,在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和其他语言也一样吗? 字符串对象与语言中的其他对象之间是否存在显着差异,除了它们是不同的数据类型之外?

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

字符串不是对象。引用Lua手册:

  

Lua中有八种基本类型:nil,boolean,number,string,   function,userdata,thread和table。 ....

     

表,函数,线程和(完整)用户数据值是对象:   变量实际上不包含这些值,只引用   他们。赋值,参数传递和函数总是返回   操纵对这些值的引用;这些操作并不意味着   任何类型的副本。

这句话

  

表,函数,线程和(完整)用户数据值是对象

表示仅这些是对象其余为基本类型(基元)