2016-07-13 26 views
1

Ich bin ziemlich neu, D zu betrachten (wie ... gestern, nach der Suche nach Kotlin-Benchmarks ...) und versuche derzeit zu entscheiden, ob es eine Sprache ist, mit der ich zurechtkommen will.D erhält den Ort in Args?

Ich versuche, einige Argumente von der Befehlszeile übergeben, und ich bin ein wenig überrascht. Sagen wir, ich gebe "-Foo-Bar". Mein Programm ist ganz einfach:

import std.stdio; 

void main(string [] args) { 

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

aus Java, ich es erwartet

  • -foo
  • -Bar

Aber mein D-Programm scheint drucken seine zu erhalten Ort als erstes Argument? Die Ausgabe lautet:

  • /home/(username)/Java_Projects/HelloD/hellod
  • -foo
  • -Bar

Ich habe versucht, für diese Suche, aber alle Google trifft beziehen zu Java -D Schalter ... Also, ist das beabsichtigte Verhalten? Wenn ja, weiß jemand warum?

+1

Ja, C++ (und vielen anderen langages) arbeitet auf diese Weise. Die ersten Argumente sind immer Pfad zu der ausführbaren Datei. – Nil

+0

Mögliches Duplikat von [Ist args \ [0 \] garantiert der Ausführungspfad?] (Http://stackoverflow.com/questions/383973/is-args0-guaranteed-to-be-the-path-of- Ausführung) –

+0

Das "Duplizieren" ist für eine andere Sprache. – Silverclaw

Antwort

7

Das ist normal in D, geerbt von C und C++. Das erste Argument ist der Name des Programms, damit Sie es verwenden können, um zu bestimmen, welche Funktion in einem Multi-Use-Programm gewünscht wird.

Die Busybox Unix-Toolset https://busybox.net/ verwendet diese (zumindest früher, bin ich nicht sicher, ob sie sich geändert hat) busybox, wie so ein Programm Befehle aufgerufen werden können, verschiedene Unix wie ls oder cp.

Mit args[0] kann es sagen, wie es aufgerufen wurde, obwohl sie alle auf das gleiche Binärprogramm zeigen und dementsprechend reagieren.


TIPP: Wenn Sie in diesen nicht interessiert sind, können Sie Schleife nur Ihre args mit foreach(arg; args[1 .. $]) {}

+0

Danke. Ich hatte bisher C-ähnliche Sprachen vermieden und jetzt war es nicht normal. Und es ist ziemlich schwer, nach irgendetwas zu suchen, was mit D zusammenhängt. x__x – Silverclaw

+0

Ich kann bestätigen, busybox verwendet immer noch dies, ein anderes Beispiel ist mkfs, wo fs-spezifische Befehle wie mkfs.ntfs sind symbolische Verknüpfungen zu den einzigen binären mkfs. – cym13

+0

Für ein bisschen einfacher Google-Fähigkeit verwenden "dlang" oder "d Programmiersprache" statt nur – Meta