Lua 类型教程 |
|
请查看 TutorialExamples 获取有关在此运行示例的说明。我们将使用 print()
函数打印值或对这些值的计算结果。参数周围的括号很重要,省略它们会导致错误。
> print("hello") -- print the string hello. hello
数字类型表示浮点数(分数)。从 5.3 版本开始,整数(非分数)值有单独的内部表示。但是,这些也被认为是“数字”类型。
Lua 允许使用通常的运算符对数字进行简单的算术运算,以进行加、减、乘和除。
> print(2+2) 4 > print(2-7) -5 > print(7*8) 56 > print(7/8) 0.875
请注意,数字不会被四舍五入为整数。它们是浮点数或实数。我们可以使用 =
运算符将值分配给变量。
> x = 7
> print(x)
7
=
运算符将数字 7 分配给变量 x
。我们再次使用 print()
函数打印 x
的值。现在我们可以将 x
中的值用于其他计算。
> x = x * 9 > print(x) 63 > print(x*2) -- will not change the value of x 126 > print(x) 63
有关 Lua 数字类型的更多信息,您可以查看 NumbersTutorial。
Lua 还使用字符串(即文本)类型。要创建字符串,请将文本括在 "双引号"
或 '单引号'
中
> print("hello") hello
> who = "Lua user" > print(who) Lua user
..
运算符将字符串连接(连接)在一起
> print("hello ") hello > print("hello " .. who) -- the variable "who" was assigned above hello Lua user > print(who) Lua user
与其他一些语言不同,您不能使用 +
运算符连接字符串。例如:
> message = "hello " + who stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ?
有关 Lua 字符串类型的更多信息,您可以查看 StringsTutorial。
布尔值的值为 true
或 false
。如果一个值不是 true
,则它必须是 false
,反之亦然。not
运算符可以放在布尔值之前以将其反转。例如,not true
等于 false
。
> x = true > print(x) true > print(not x) false > print(not false) true
==
和不等于 ~=
运算符将根据提供给它们的值返回布尔值。
> print(1 == 0) -- test whether two numbers are equal false > print(1 == 1) true > print(1 ~= 0) -- test whether two numbers are not equal true > print(true ~= false) -- is true not equal to false? true
请注意,对于赋值,您使用单个等号 (=
),但对于比较,您使用双等号 (==
)。这两个运算符具有不同的含义,但看起来很相似,在您想要使用另一个运算符时写错一个运算符是一个常见的错误。
有关 Lua 布尔类型的更多信息,您可以查看 表达式教程。
Lua 拥有一个通用的聚合数据类型,称为表。聚合数据类型用于存储包含其他对象的集合(例如列表、集合、数组和关联数组)(包括数字、字符串,甚至其他聚合)。Lua 是一种独特的语言,因为它使用表(关联数组)来表示所有其他聚合类型。
表使用一对花括号 {}
创建。让我们创建一个空表
> x = {} > print(x) table: 0035C910
表教程 将稍后解释如何使用表。
在 Lua 中,函数被分配给变量,就像数字和字符串一样。函数使用 function
关键字创建。这里我们创建一个简单的函数,它将打印一条友好的消息。
> foo = function () print("hello") end -- declare the function > foo() -- call the function hello > print(foo) -- get the value of the variable "foo" function: 0035D6E8
foo
的值,它显示(像表一样)该值是一个函数,并且具有该特定函数的唯一标识符。因此,作为与任何其他值一样的一个值,我们应该能够将函数分配给变量,就像其他值一样,我们也可以。
> x = function() print("hello") end > x() hello > print(x) function: 0035EA20
函数可以是表的一部分
> a = "aeiou" -- a string > b = 13 -- a number > c = function() -- a function > print ("\n\n\tAin't it grand") > end > d = { a, b ,c} -- put them in a table > function printit(tata) -- print their types. >> for key, value in ipairs(tata) do print(key, type(value)) end >> end > printit(d) 1 string 2 number 3 function
函数教程 将稍后解释如何使用函数。
nil
是一个特殊的值,它表示缺少有用的值。如果您尝试获取一个不存在的变量,您将获得 nil
> print(x) nil > x = 2.5 > print(x) 2.5
nil 使用的其他地方将在其他教程中显示。
用户数据值是 Lua 中的外部对象,例如在 C 中实现的对象。这些通常是在 C 库中的对象暴露给 Lua 时出现的。您无法在 Lua 中对用户数据值执行任何操作,除了传递它,它只对提供给由创建用户数据的相同 C 库公开的函数有用。但是使用元方法(在后面的教程中解释),可以使用户数据与运算符一起工作并类似于表。用户数据是一个更高级的主题,在 [Lua 参考手册] 中有更详细的讨论。
线程值代表一个独立的(协作的)执行线程。这些将在协程教程中进一步讨论。
您可能已经注意到,虽然我们创建了上面的变量,但我们不必指定要创建的变量类型。例如,
a = 1
b = "hello"
c = {}
a = 1
a = "hello"
a = {}
由于 Lua 是一种反射语言,我们可以使用 Lua 函数type()
来获取特定对象的类型描述。
> x = "123" -- a string > print(x, type(x)) -- show the value of x and its type 123 string > x = x + 7 -- add a number to the string which forces coercion > print(x, type(x)) -- again show the value and type 130 number