Last modified on 4 July 2010, at 21:43

REBOL Programming/Language Features/Objects

ObjectsEdit

Objects are a very common way to manage and access data in REBOL. In fact most of the REBOL system is built with objects. The SYSTEM object can be considered the spine of REBOL, the place where all non-core functions and data reside. It's the place you can find all of VID, the various networking protocols and all mezzanine functions.

Using ObjectsEdit

Objects are made with the MAKE function.

Example:

>> shopping-basket: make object! [fruits: 5 vegetables: 3]
>>

Note that nothing is returned on the console. Objects can hold all types of data, even other objects.

A bigger example, as you'd normally write it in your program code:

shopping-basket: make object! [
  fruits: 5
  vegetables: 3
  dairy-products: 7
]

Accessing ObjectsEdit

If you want to view an object, you might have noticed that typing the name in doesn't return anything:

>> shopping-basket
>>

You can use different methods for viewing the object data:

>> probe shopping-basket
make object! [
  fruits: 5
  vegetables: 3
]

A nicer overview can be returned with:

>> ? shopping-basket
SHOPPING-BASKET is an object of value: 
   fruits          integer!  5 
   vegetables      integer!  3 
   total           integer!  8 

Or:

>> print dump-obj shopping-basket 
   fruits          integer!  5 
   vegetables      integer!  3 
   total           integer!  8

These functions can't be used in programs to get values from an object, since they only print information in the console. They don't produce a return value.

One way is to use path notation:

>> shopping-basket/fruits
== 5

There are multiple ways to access object data, both for manipulation and viewing.

Referring to SelfEdit

An object can refer to itself or other variables and functions within itself using SELF:

>> shopping-basket: make object! [fruits: 5 vegetables: 3 total: self/fruits + self/vegetables]
>> shopping-basket/total
== 8

Note, that the usage of SELF in the above example is not necessary, though.