【问题标题】:D receives location in args?D 在 args 中接收位置?
【发布时间】:2016-07-13 17:51:41
【问题描述】:

我对 D 很陌生(比如...昨天,在寻找 Kotlin 基准之后...),目前正在尝试确定它是否是我想要处理的语言。

我正在尝试从命令行传递一些参数,但我有点惊讶。假设我通过了“-Foo -Bar”。 我的程序很简单:

import std.stdio;

void main(string [] args) {

    foreach(arg; args) {
        writeln(arg);
    }
}

来自 Java,我希望它能够打印

  • -富
  • -酒吧

但是我的 D 程序似乎接收它的位置作为第一个参数? 输出是:

  • /home/(用户名)/Java_Projects/HelloD/hellod
  • -富
  • -酒吧

我尝试搜索此内容,但所有 Google 搜索结果均指向 Java 的 -D 开关... 那么,这是预期的行为吗?如果是,有人知道为什么吗?

【问题讨论】:

标签: command-line d args


【解决方案1】:

这在 D 中很正常,继承自 C 和 C++。第一个参数是程序的名称,因此您可以使用它来确定您想要在多用途程序中使用哪个功能。

busybox unix 工具集https://busybox.net/ 使用这个(嗯,至少习惯了,我不确定它是否已经改变)所以一个程序,busybox,可以作为各种 unix 命令调用,如 lscp.

使用args[0],尽管它们都指向同一个二进制程序,但它可以分辨出它被称为哪一个,并做出相应的响应。


提示:如果您对此不感兴趣,可以使用 foreach(arg; args[1 .. $]) {} 循环仅使用您的参数

【讨论】:

  • 谢谢。到目前为止,我一直避免使用类似 C 的语言,但现在不这样做是正常的。而且很难用谷歌搜索任何与 D 相关的东西。 x__x
  • 我可以确认busybox仍在使用它,另一个例子是mkfs,其中mkfs.ntfs等特定于fs的命令是唯一二进制mkfs的符号链接。
  • 为了更简单的 google 能力,请使用“dlang”或“d 编程语言”,而不仅仅是 D。
  • 顺便说一句,也许最好警告您 args[0] 不一定是二进制文件的完整路径。 AFAIK,它可能是相对路径或符号链接的路径,具体取决于程序的启动方式。
  • 事实上,它不是 C 的东西,而是 exec 系统调用定义的 Unix 的东西。编程语言仅反映操作系统提供的内容。 Java 在某种程度上是它自己的操作系统,它可以根据需要重新定义其机器模型(可能是为了提高可移植性)。所以这里的怪人是 Java,而不是 D。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多