Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
84
Task/Object-serialization/Rebol/object-serialization.rebol
Normal file
84
Task/Object-serialization/Rebol/object-serialization.rebol
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
Rebol [
|
||||
title: "Rosetta code: Object serialization"
|
||||
file: %Object_serialization.r3
|
||||
url: https://rosettacode.org/wiki/Object_serialization
|
||||
needs: 2.7.0
|
||||
]
|
||||
; ----------------------------
|
||||
; Define a base "class" Person
|
||||
; ----------------------------
|
||||
; In Rebol, `make object! [...]` creates an object with defined fields (and optionally functions).
|
||||
; Here, Person has two properties: name (string) and age (integer).
|
||||
Person: make object! [
|
||||
name: ""
|
||||
age: 0
|
||||
]
|
||||
|
||||
; ------------------------------------------------
|
||||
; "Inherit" a subclass Student from Person
|
||||
; ------------------------------------------------
|
||||
; Since Rebol doesn't have classical inheritance, `make Person [...]`
|
||||
; makes a copy of the Person object and lets you add or override fields.
|
||||
; Student adds an extra property: grade (e.g., "A", "B", etc.)
|
||||
Student: make Person [
|
||||
grade: ""
|
||||
]
|
||||
|
||||
; ------------------------------------------------
|
||||
; Inherit another subclass Teacher from Person
|
||||
; ------------------------------------------------
|
||||
; Teacher adds an extra property: subject (teaching subject)
|
||||
Teacher: make Person [
|
||||
subject: ""
|
||||
]
|
||||
|
||||
; ----------------------------------
|
||||
; Create specific instances of each
|
||||
; ----------------------------------
|
||||
; Values in brackets override default properties when creating the object.
|
||||
john: make Person [name: "John" age: 40]
|
||||
sally: make Student [name: "Sally" age: 18 grade: "A"]
|
||||
bob: make Teacher [name: "Bob" age: 50 subject: "Math"]
|
||||
|
||||
; ------------------------------------------------
|
||||
; Print text in yellow (assuming ANSI color functions are set up)
|
||||
; ------------------------------------------------
|
||||
print "Original instances:"
|
||||
|
||||
; ------------------------------------------------
|
||||
; `probe` prints the value in developer-readable format and returns it
|
||||
; This is useful for quickly seeing object content
|
||||
; ------------------------------------------------
|
||||
probe john
|
||||
probe sally
|
||||
probe bob
|
||||
|
||||
; ------------------------------------------------
|
||||
; Create a block containing all three objects
|
||||
; `reduce` evaluates each word and inserts its value into the block
|
||||
; ------------------------------------------------
|
||||
objects: reduce [john sally bob]
|
||||
|
||||
; ------------------------------------------------
|
||||
; Save all object data (including words, values, and types) to a file
|
||||
; `save/all` preserves the complete object structure
|
||||
; ------------------------------------------------
|
||||
save/all %objects.dat objects
|
||||
|
||||
; ------------------------------------------------
|
||||
; Show header for loaded instances
|
||||
; ------------------------------------------------
|
||||
print "Loaded instances:"
|
||||
|
||||
; ------------------------------------------------
|
||||
; Load objects back from the file
|
||||
; `load` reconstructs the original structures from the saved format
|
||||
; ------------------------------------------------
|
||||
read-objects: load %objects.dat
|
||||
|
||||
; ------------------------------------------------
|
||||
; Iterate over loaded objects and display them
|
||||
; ------------------------------------------------
|
||||
foreach obj read-objects [
|
||||
probe obj
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue