Momentan gibt es nichts dafür, aber es ist eine gute Idee. So gut, dass someone has suggested it vor. :-)
Muss ich das manuell machen?
Sie können manuell einen neuen Generator schreiben, der Ihr "Dialekt Spec" -Format definiert. Dann entweder etwas wie einen HELP-Befehl geben oder HELP erweitern, um es zu erkennen.
Sehr kurzes Beispiel eine Gruppe von Techniken zu demonstrieren, die so etwas wie diese (nicht alle erwartet, dass sie offensichtlich eher an der Flexibilität andeuten) nützlich sein können tun:
make-dialect: function [spec [block!] body [block!]] [
return function ['arg [block! word!]] compose/deep/only [
case [
arg = 'HELP [
foreach keyword (spec/keywords) [
print [keyword "-" {your help here}]
]
]
block? arg [
do func [arg] (body) arg
]
'default [
print "Unrecognized command. Try HELP."
]
]
]
]
So gibt es Ihre Funktion, die eine Dialektspezifikation annimmt und eine Funktion ausführt. Sobald Sie Ihren Generator haben, verwendet, kann es weniger manuell sein:
mumble: make-dialect [keywords: [foo baz bar]] [
print ["arg is" mold arg]
]
>> mumble help
foo - your help here
baz - your help here
bar - your help here
>> mumble [<some> [dialect] {stuff}]
arg is [<some> [dialect] {stuff}]
Die verwendeten Techniken sind hier:
Weiche Zitiert - Normalerweise würden Sie mumble 'help
zu sagen haben „Zitat "Die Hilfe als ein lit-Wort! damit es das Wort erfüllt! murmeln (im Gegensatz zum Ausführen des Standard-HILFE-Befehls). Aber weil arg in der generierten Funktion als 'arg
deklariert wurde, war es "weich zitiert" ... das bedeutet, dass Wörter und Pfade nicht ausgewertet werden. (Parens, get-words und get-paths werden immer noch sein.) Es ist ein Kompromiss, denn wenn jemand eine Variable hat, die er weitergeben will, muss er : var oder (var) als Argument angeben anstelle von nur var
(stellen Sie sich vor, wenn der Block den Dialekt zu übergeben ist in einer Variablen), so dass Sie es nicht unbedingt verwenden möchten ... aber ich dachte, es wäre eine interessante Demo, mumble help
ohne das lit-Wort arbeiten zu lassen!
Tiefe Zusammensetzung - Die spec
und die body
Variablen, die nur auf make-dialect
weitergegeben werden existieren, solange make-dialect
läuft. Sobald es vorbei ist, werden sie weg sein. Sie können diese Wörter also nicht im Körper der Funktion lassen, die Sie erzeugen. Dies verwendet COMPOSE/DEEP, um Parens im Körper auszuwerten, bevor der Funktionsgenerator zum Ausführen des Ergebnisses ausgeführt wird, wodurch die Daten für die Blöcke effektiv extrahiert und in die Körperstruktur der Funktion eingefügt werden.
Weiternutzung Funktion der Bindung Arbeit - Die erzeugte Funktion hat eine Spezifikation mit einem Parameter arg
, die nicht an der Aufrufstelle von make-dialect
noch nicht gab. Also muss arg zu etwas zurückgeworfen werden, aber was? Es ist möglich, es manuell zu tun, aber eine einfache Möglichkeit ist, dass FUNC die Arbeit für Sie erledigt.
Das sind einige der Techniken, die in der vorgeschlagenen Lösung verwendet werden würde, das Dokument Dialekte nicht nur sucht, sondern eine einfache Methode zur Verfügung stellen, durch die ihre Keywords neu zugeordnet werden könnten (zB wenn man das Rebol System konfiguriert wurde für eine andere gesprochene Sprache).