Hoe zit het met.. eval (;)
Door Doesbo
Een handig commando voor bouwvakkers kan het commando 'eval'
zijn, een commando waarmee je van de commandoregel in de metro
zelf (dus niet in een editor of door het schrijven van een verb)
een regel verb-code kan intikken en laten verwerken.
Allereerst is dit handig om verbs te runnen die normaal niet
van de commandoregel te runnen zijn. Deze verbs hebben vaak als
argumenten 'this none this' (kortweg: tnt) zodat het van de
commandoregel bijna onmogelijk is de juiste zin in een keer in te
tikken. Ze worden gebruikt om vanuit andere, meestal gewone
verbs, aangeroepen te worden.
Stel, je ziet op een utilities-object (een object waar
allemaal handige tnt verbs opstaan) een verb wat je snel even
wilt gebruiken zonder er meteen zelf een verb voor te hoeven
schrijven. Bijvoorbeeld het verb 'uppercase' van de String
Utilities (#20). Je wilt snel zien hoe 'Doesbo' er in
hoofdletters uitziet. Eigenlijk zou je een verb moeten schrijven
waarin als enige regel staat:
#20:uppercase("Doesbo");
Nu tik je direct in:
eval #20:uppercase("Doesbo");
en je krijgt als antwoord:
=> "DOESBO"
Korter voor eval is de puntkomma (;) en dan direct de dingen
erachteraan, net zoals je het kent bij het zeggen (") en
emoten (:). Dus
eval #20:lowercase("dIMITRI");
kun je tikken als:
;#20:lowercase("dIMITRI");
Nog een handig voorbeeld: je wilt van een intern verb_commando
(zoals setadd()) gebruik maken om een waarde toe te voegen aan
een property. In plaats dat je daar een eenregelig verb voor
schrijft, tik je in:
;#14972.verbs = setadd(#14972.verbs, "koe2");
om in het property #14972.verbs de string "koe2" toe
te voegen.
Bij het 'eval' commando werken de vastgelegde variabelen uit
een verb (zoals, this, player, caller, etc.) helaas niet. Ook
voor de commandolijn vastgelgegde variabelen (me en here) werken
in de eerste instantie niet. Dus i.p.v.
;here.free_entry = 0;
of
;player.location.free_entry = 0;
zul je het objectnummer van je kamer in moeten vullen, bijv.
;#15431.free_entry = 0;
Toch kun je dingen zoals 'me' en 'here' gebruiken door ze te
definieren in een slim property wat al (meestal leeg) op jezelf
zit. Je wilt bijv. dat 'me' altijd over jouw gaat, en dat 'here'
altijd gaat over de kamer waar je nu inzit. Dus me=player en
here=player.location. (Zo zou het er in verb-taal uit zien.) Tik
nu in:
@setenv me=player;here=player.location
en de variabelen me en here werken nu wel in het eval
commando! Het commando @setenv gebruik je dus om eval-waarden te
zetten. (Voor de bitnerds, die waarden gaan naar je property
.eval_env)
Veel plezier met evallen!
|