数组是类型还是值?

Is an array a type or a value?

我正在编写我自己的语言(只是为了好玩),我即将实现数组。 我将数组定义为具有固定最终长度且包含多个值的数据结构。所以他们应该像 Java 一样工作,即 C-like

数组应创建为:

nr[] a = [1, 2, 5, 3, 4]

其中 nr 是值的类型,a 是名称,[1, 2, 5, 3, 4] 是容器。

数组应按名称传递给函数:

main {
    nr[] a = [1, 2, 5, 3, 4]
    printArray(a)
}

func printArray(array):
    print(array)

或字面意思

main:
    printArray([1, 2, 5, 3, 4])

func printArray(array):
    print(array)

该语言包含三种主要数据类型,bool、text 和 nr,以及 var 关键字,它根据值设置类型。数组可以在方法之间传递,也可以像变量一样存储值本身。

我称存储值的事物为文字(5,“text”或 false),或名称(a = 10),或调用(function()),“ValueHolders”,因为它们都持有一个具体值。

现在回答我的问题:我的数组是 ValueHolder 还是数据类型,还是我必须为此想出一些全新的东西?

请使用其他语言的示例,我很想了解更多!

编辑;举几个例子:

该声明后面的任何内容都会隐式转换为 nr 数组。

这是一个可变数组,数组中值的类型未知。没有办法提前找出这些值共享哪些类型,因为在该行被执行之前没有生成。为什么?如果此数组中的值是函数的 return 值,则必须调用该函数,并且在非函数式语言中,这可能会改变程序的整个结构。

这只是意味着:将每个 return 值转换为 nr 数组。如果这不起作用,则 return 值无效,程序将抛出运行时异常。 (我知道这不是最简洁的方法,但是 return类型是可选的,更像是一个指南,而不是严格的规则。)

我想你想知道什么,真的取决于上下文,因为 var[][1, 2, 3] 的目的完全不同。

用你的话来说:

  • 容器[val1, val2, ...]是一个ValueHolder,因为它可以传递给函数和声明。它 returns 一个数组值。
  • 如果您将数组定义为 var[] array = ...,“数组”也是一个 ValueHolder,returns 也是一个数组值。
  • var[] a = ... 是一种声明类型,它告诉 =.
  • 之后的值需要哪种类型
  • a[1] = ... 是数组访问,但既不是 ValueHolder,也不是声明。
  • function(a[2]) 是另一个数组访问,但是这次,它持有一个返回值。将其想象成类似于函数调用的东西。

对于您的语言,您必须分别处理这些情况,它们都有不同的含义。祝你好运:)