Usually, one can read the value of a property on an object with a simple expression:
Expression must return an object number; if not,
raised. If the object with that number does not exist,
raised. Otherwise, if the object does not have a property with that name,
E_PROPNF is raised. Otherwise, if the named property is not
readable by the owner of the current verb, then
E_PERM is raised.
Finally, assuming that none of these terrible things happens, the value of the
named property on the given object is returned.
I said "usually" in the paragraph above because that simple expression only works if the name of the property obeys the same rules as for the names of variables (i.e., consists entirely of letters, digits, and underscores, and doesn't begin with a digit). Property names are not restricted to this set, though. Also, it is sometimes useful to be able to figure out what property to read by some computation. For these more general uses, the following syntax is also allowed:
As before, expression-1 must return an object number. Expression-2
must return a string, the name of the property to be read;
is raised otherwise. Using this syntax, any property can be read,
regardless of its name.
Note that, as with almost everything in MOO, case is not significant in the names of properties. Thus, the following expressions are all equivalent:
foo.bar foo.Bar foo.("bAr")
The LambdaCore database uses several properties on
#0, the system
object, for various special purposes. For example, the value of
#0.room is the "generic room" object,
#0.exit is the "generic
exit" object, etc. This allows MOO programs to refer to these useful objects
more easily (and more readably) than using their object numbers directly. To
make this usage even easier and more readable, the expression
(where name obeys the rules for variable names) is an abbreviation for
Thus, for example, the value
$nothing mentioned earlier is really
#-1, the value of
As with variables, one uses the assignment operator (`=') to change the value of a property. For example, the expression
14 + (#27.foo = 17)
changes the value of the `foo' property of the object numbered 27 to be
17 and then returns 31. Assignments to properties check that the owner of the
current verb has write permission on the given property, raising
E_PERM otherwise. Read permission is not required.
Go to the first, previous, next, last section, table of contents.