这不是答案,而是对 dbenham 答案的回复。
我对这件事的看法与德本汉姆斯的观点正好相反。在我看来,在回答 Batch 主题时,我们必须非常简洁明了,尤其是对于初学者,并提供有助于解决问题的最少信息,但不要压倒答案并使答案混淆。在 Batch中有两种模拟数组的方法:通过广泛使用的方括号来包围下标,但在这两种情况下,概念是相同的:通过数字索引从具有相同名称的变量列表中选择特定元素.
如果不使用方括号,初学者将无法理解核心概念;相反,他们可能认为批处理文件使用了“奇怪的技巧”来解决问题。另一方面,经验丰富的程序员肯定会说:“嘿!这是一个数组,但以不同的方式编写”。没有办法将此功能误认为其他任何不同的东西,也没有理由将其伪装成其他不同的东西。
如果使用方括号,初学者会发现大量关于“数组”概念的信息以及许多编程语言中关于此主题的大量示例,甚至是独立于任何编程语言的描述,当然,这些语言可以立即用于批处理文件. 在这种情况下使用方括号比不这样做要清楚得多。但是,有些人认为这些好处不值得假设 Batch “正式支持数组”的“混乱”。
在我看来,这件事的中心点不是讨论 Batch 是否正式支持数组,而是任何人都可以使用数组概念来操作 Batch 文件中的数据这一事实。我认为有些人可能认为 Batch 正确支持数组,尤其是初学者,这完全没有问题;数组管理在不同的编程语言中是不同的,所以只需要解释批处理细节。但是,如果对这个主题进行更正式的讨论似乎很重要,我想举一个不同的例子。
你知道 C 编程语言不“正式支持”任何输入输出操作吗?当 Dennis Ritchie 设计它时,他专门将这些操作留在了语言设计之外,以保持编译器的小而紧凑。这是否意味着您不能在 C 程序中读/写任何数据?当然不是!这只是意味着这些操作是通过函数库在编译器之外实现的,所以如果你需要开发一个 C 编译器,你不必担心如何编译 PRINT、READ 或任何其他 I/O 语句,因为它们根本不存在用C语言!
很有趣,不是吗?
因此,如果初学者问:“如何用 C 语言编写消息?”,你认为正确的答案应该是:“你不能。C 语言没有正式支持任何 I/O语句,但你可以通过库函数模拟此类操作”?当然不是!大多数人只会回答描述 printf,但实际上没有人提到 printf()不是 C 语言的一部分,我认为这是正确的。归根结底,如果有人认为 C 语言支持 I/O 操作,那有什么问题呢?无论以何种方式实现,人们都可以在 C 程序中使用I/O 操作,对吧?
好吧,以我的拙见,对于批处理中的数组,应该使用相同的方法。
也许一个更接近的例子是这个:有很多关于“批处理中的算术运算”的问题,答案通常是:“使用set /A
命令”。我从来没有看到一个答案表明“批处理文件不支持数字变量,只支持字符串,但算术运算可以通过多种方式模拟,比如set /A
命令”。为什么?当纯粹主义者对 Batch 中的数组发表意见时,他们似乎是“更纯粹的人”,但他们并不关心其他主题,例如数字。实在不明白频繁澄清“批处理不支持数组”的目的!
用户rojo关于这一点的看法:
这是一个迂腐的论点,无法解决提问者试图解决的问题
(请参阅他在此答案上方的完整评论)。