53 lines
1.6 KiB
Text
53 lines
1.6 KiB
Text
; defining a custom type
|
|
define :person [ ; define a new custom type "Person"
|
|
name ; with fields: name, surname, age
|
|
surname
|
|
age
|
|
][
|
|
; with custom post-construction initializer
|
|
init: [
|
|
this\name: capitalize this\name
|
|
]
|
|
|
|
; custom print function
|
|
print: [
|
|
render "NAME: |this\name|, SURNAME: |this\surname|, AGE: |this\age|"
|
|
]
|
|
|
|
; custom comparison operator
|
|
compare: 'age
|
|
]
|
|
|
|
; create a method for our custom type
|
|
sayHello: function [this][
|
|
ensure -> is? :person this
|
|
|
|
print ["Hello" this\name]
|
|
]
|
|
|
|
; create new objects of our custom type
|
|
a: to :person ["John" "Doe" 34] ; let's create 2 "Person"s
|
|
b: to :person ["jane" "Doe" 33] ; and another one
|
|
|
|
; call pseudo-inner method
|
|
sayHello a ; Hello John
|
|
sayHello b ; Hello Jane
|
|
|
|
; access object fields
|
|
print ["The first person's name is:" a\name] ; The first person's name is: John
|
|
print ["The second person's name is:" b\name] ; The second person's name is: Jane
|
|
|
|
; changing object fields
|
|
a\name: "Bob"
|
|
sayHello a ; Hello Bob
|
|
|
|
; verifying object type
|
|
print type a ; :person
|
|
print is? :person a ; true
|
|
|
|
; printing objects
|
|
print a ; NAME: John, SURNAME: Doe, AGE: 34
|
|
|
|
; sorting user objects (using custom comparator)
|
|
sort @[a b] ; Jane..., John...
|
|
sort.descending @[a b] ; John..., Jane...
|