Warum kann ich nicht binden Dinge wie E-MAIL! im globalen Kontext auf Dolmetscher Startup?

StackOverflow https://stackoverflow.com/questions/3068467

  •  28-09-2019
  •  | 
  •  

Frage

Wenn ich eine R3 Alpha 99-Sitzung starten, und geben Sie diese als erste Befehl, ich erhalte eine Fehlermeldung:

>> is-email-addr: get bind to-word "email?" bind? 'system
** Script error: email? is not in the specified context
** Where: bind
** Near: bind to-word "email?" bind? 'system

Aber wenn ich beenden, neu starten und stattdessen einen Test durchführen zu beweisen, dass die email? primitiven Leben in globalem Kontext wie das system Objekt, der Test selbst meine Alias ??Arbeit macht:

>> equal? bind? 'system bind? 'email?
== true

>> is-email-addr: get bind to-word "email?" bind? 'system
>> is-email-addr fork@example.com
== true

Was ist los, denn hier?

War es hilfreich?

Lösung

hat Bindung nicht Worte Kontext hinzufügen, sofern Sie es nicht sagen -. Sie verwenden bind/new haben

>> get bind/new to-word "email?" bind? 'system

Aber Ihre Frage zeigt ein paar falschen Vorstellungen über das R3-Bindungsmodell. Es gibt keinen einzigen globalen Kontext in R3, nicht wie R2. Das Wort 'system in Ihrem Beispiel wird auf den tasklokalen shared Skript Kontext gebunden, auch bekannt als den Benutzerkontext. Und den richtigen Wert bekommt oft nach Worten im Benutzerkontext bedeutet, sie aus dem Systemkontext oder die Ausfuhr der geladenen Module, ein Prozess bekannt als interning die Worte zu importieren.

tun, was Sie anscheinend hier tun wollen, wäre es am besten für Sie intern verwenden, wie folgt aus:

>> get first intern to-block "email?"

Die to-block verwendet wird, weil intern allgemein verwendet wird, auf ganze Codeblöcke zu betreiben. Ich werde es in der nächsten Version beheben, so dass es direkt als auch auf Worte arbeiten kann; dann werden Sie in der Lage sein, dies zu tun:

>> get intern to-word "email?"

Ich hoffe, das hilft.

Warum sind Sie nicht das Wort direkt mit? Mit Strings und Umwandeln in Worte später hat so viel Aufwand, die in der Regel nicht notwendig ist.

Andere Tipps

Wenn Sie darauf bestehen, mit wirklich „E-Mail?“ Zeichenfolge anstelle einer ‚E-Mail? Wort, dann ist der einfachste Weg für Sie ein Wort von ihm zu erhalten, während keine Seltsamkeiten zu beobachten wäre, die LOAD Funktion wie folgt zu verwenden:

is-email-addr: get bind load "email?" bind? 'system
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top