Lolcode - 类型

LOLCODE 旨在测试编程语言设计的边界。 它是一种深奥的编程语言,其灵感来自互联网上的有趣事物。 本章让您了解 LOLCODE 类型。

类型

目前LOLCODE中的变量类型有 −

  • 字符串(YARN)
  • 整数 (NUMBR)
  • 浮动 (NUMBAR)
  • 和布尔值 (TROOF)
  • 数组 (BUKKIT)

在 LOLCODE 中,变量类型由编译器动态处理。 如果变量没有初始值,则称为无类型变量(在 LOLCODE 中称为 NOOB)。

LOLCODE 中声明和使用不同类型的语法如下所示 −

创建任意数据类型的变量

I HAS A <VARIABLE> ITZ A <DATA TYPE>

创建变量并为其赋值

I HAS A <VARIABLE> ITZ <EXPRESSION<

为已创建的数据类型赋值

<VARIABLE> R <EXPRESSION>

无类型(NOOB)

无类型数据类型(称为 NOOB)不能转换为除 TROOF 数据类型之外的任何其他类型。 将 NOOB 隐式转换为 TROOF 会使变量失败。 此后,对 NOOB 的任何操作都会导致错误。

NOOB 数据类型(即未初始化且没有任何初始值的类型)变量的显式转换会导致所有其他类型的变量值为零。

要定义无类型变量,只需声明一个变量并分配一个值,如本示例所示 −

HAI 1.2
I HAS A VAR3
VAR3 R "ANYVALUE"
VISIBLE VAR3
BTW Or declare in same line
I HAS A VAR4 ITZ 44
VISIBLE VAR4
KTHXBYE

当你运行上面的程序时,你会发现以下结果 −

sh-
4.3$ lci main.lo 
ANYVALUE
44

布尔值(TROOFS)

在LOLCODE中,布尔值有两种类型。 BOOLEAN 通常有两个值 - true 和 false。 但是,在 LOLCODE 中,布尔值被称为 TROOF,真/假值分别被称为 WIN/FAIL。 所有未初始化的值(例如空字符串("")或空数组)都将转换为 FAIL。 所有其他初始化值的计算结果均为 WIN。

示例

HAI 1.2
I HAS A VAR3 ITZ A TROOF
VAR3 R "FAIL"
   VISIBLE VAR3
KTHXBYE

执行上面的代码可以看到如下输出 −

sh-4.3$ lci main.lo
FAIL

数字类型 (NUMBR)

在 LOLCODE 中,NUMBR 代表整数。 任何数字序列都被视为 NUMBR,除非在序列之间的任意位置出现小数。 要使任何数字为负数,可以在其前面加上表示负数的连字符 (-)。

示例

HAI 1.2
I HAS A VAR3 ITZ A NUMBR
   VISIBLE VAR3
KTHXBYE

上面的代码运行后会显示以下结果−

sh- 
4.3$ lci main.lo
0

与 NUMBR 类似,LOLCODE 有另一种数据类型,在许多编程语言中表示小数或浮点数。 在 LOLCODE 中,NUMBAR 是包含一位小数点的浮点数。 将 NUMBAR 转换为 NUMBR 会截断浮点数的小数部分,并将其作为 NUMBR 返回,不带任何小数。

字符串 (YARN)

在 LOLCODE 中,包含字符串的值,即字符串文字 (YARN) 应以双引号 ("") 开头和结尾。

字符串内可以写入任何内容,例如空格、逗号、句号、感叹号或任何其他符号。 缺少任何单引号的字符串可能会导致错误。 冒号在 LOLCODE 中用作转义字符,冒号后面的任何值都有特殊含义。

  • :) − 冒号后面的右括号代表换行符 ()

  • :> − 冒号后面的右尖括号表示制表符 ( )

  • :o − 冒号后面的 'o' 字符代表铃声(嘟嘟声)(\g)

  • :" − 冒号后面的"代表文字双引号 (")

  • :: − 冒号后面的冒号代表单个冒号 (:)

示例

HAI 1.2
I HAS A VAR3 ITZ A YARN
VAR3 R "XYZ"
   VISIBLE VAR3
KTHXBYE

上面给出的代码在执行时会产生以下输出 −

sh-
4.3$ lci main.lo 
XYZ

BUKKIT

该类型表示一个数组。 它有命名槽,可以包含变量或函数。 BUKKIT 可以通过以下方式声明 −

BTW declaration of the BUKKIT
I HAS A [object] ITZ A BUKKIT BTW creating a variable in a slots
[object] HAS A [var] ITZ [value] BTW creating a function inside the BUKKIT
HOW IZ [object] [function name] (YR [argument1] (AN YR [argument2] (AN YR [argument3] ...)))
[function code]
IF U SAY SO

BUKKIT 内的函数还可以使用 ME'Z [var] 或 ME IZ [function name] (YR [argument1] (AN YR [argument2] (AN YR [argument3] ...))) MKAY 访问 BUKKIT 的变量和其他函数。

示例

HAI 1.2
   I HAS A VAR6 ITZ A BUKKIT
   BTW DECLARING AN ARRAY
   VAR6 HAS A VAR7 ITZ "DOGE"
   BTW VAR7 IS A STRING VARIABLE THAT IS INSERTED  INTO ARRAY VAR6
   VISIBLE VAR6'Z VAR7
   BTW GET THE ELEMENT OF ARRAY
KTHXBYE

这是运行上面给出的代码时您会发现的输出 −

sh-
4.3$ lci main.lo 
DOGE