第150章真正深入了解NBT-4
在前三章,我已经讲完了字符和数值类型的数据类型,现在我们再来看看下表:
[字符]
字符串(string)
[数值]
{整形}
字节型(byte:b)
短整型(short:s)
整型(int:i)
长整型(long:l)
{浮点型(小数)}
单精度浮点型(float:f)
双精度浮点型(double:d)
[数据]
复合标签(compound)
列表(list)
[数组]
字节型数组(bytearray:[b])
整型数组(intarray:[i])
长整型数组(longarray:[l])
按照顺序,接下来就应该到了[数据]这个数据类型了。而里面的这两个:
复合标签(compound)
列表(list)
都是我们已经非常熟悉的数据类型了,因为这两个数据类型特别常见。但神奇的是,它们也经常被忽略。
为何?
因为它们说到底,就是两种符号:
{}——复合标签(compound)
[]——列表(list)
数据可以套娃在它们里面,而多个数据需要用英文半角逗号分割。
只不过,它们两的差别,是不是只有符号和名字的差别呢?
当然不是。
实际上,它们两绝对不是你想的那么简单。
首先,它们两的作用准确的来说是:
复合标签(compound):包含一段独立的nbt标签。如{killname:“mng“,killtime:6000}
列表(list):存储多个类型相同的数据。如{time:[2020,12,21]}。
看起来似乎也没什么不同的地方对吧?
我们知道,一个nbt最外层就是由{}来包裹着的,而里面存储着各个标签,每个标签用英文半角逗号分割。而复合标签也是这样子的,所以,复合标签的作用才这样说:包含一段独立的nbt标签。
如果你看不懂,那也没关系,我们可以通过名字理解。“复合标签”这个名字是由“复合”和“标签”。
“标签”这个词的意思相信大家都知道。那么“复合”又是什么意思呢?
答案很简单:指物体等因某种原因而结合起来
理解了“复合”的意思,再来看看“复合标签”,我们很快就可以理解这个词:
指多个标签结合起来
不得不说,汉语真是博大精深。那么接下来,我们再来看看列表。
上面已经说了,列表的作用就是:存储多个类型相同的数据。翻译这个为人话就是:把多个同样类型的东西统一存储起来。
这就说明了什么?这就说明了列表的“[]”包含的只能是指定类型的数据,实际上还属于值的范围。而{}包含的就不是指定类型的数据了,而是标签!这就是两种数据类型的不同之处。
所以在列表中才不用写数据类型,因为大家都一样。这就像是乘法分配律,把公因数都提取出来,进行简化算式。
现在搞懂这两个的区别了吧?我相信你已经搞懂了。
如果你还不懂,看看上面的两个例子。
好了,相信各位都已经准备好了,那么接下来我们就进入下一阶段。
我们知道,列表可以存储多个类型相同的数据。那么当数据是复合标签时,该怎么办?
很简单,其实这种情况我们已经遇见过很多次了,比如我们最了解的enchantments(/ɛnˈtʃæntmənts/)标签,我们都知道它的格式是这样的: