Files
RustAst/examples/object_records.myc
T
Michael Schimmel d1b8d03604 Update benchmark and repeat counts
This commit updates the benchmark and repeat counts for various example
files. These changes reflect potential performance improvements or
variations observed during testing.
2026-03-03 18:55:31 +01:00

53 lines
1.5 KiB
Plaintext

;; Benchmark: 1.4us
;; Benchmark-Repeat: 1473
;; Output: [150 130 "Insufficient funds" 130]
; ---------------------------------------------------------
; Object-Oriented Records Example
; ---------------------------------------------------------
; This showcase treats a record as an object by storing
; closures that capture private state.
(do
; A factory function (Constructor) for a BankAccount object
(def make-account (fn [initial-balance]
(do
; 'balance' is a captured parameter, acting as private state
(def balance initial-balance)
{
; Method: Get current balance
:balance (fn [] balance)
; Method: Deposit money
:deposit (fn [amount]
(assign balance (+ balance amount)))
; Method: Withdraw money with validation
:withdraw (fn [amount]
(if (>= balance amount)
(assign balance (- balance amount))
"Insufficient funds"))
}
)))
; 1. Create an instance
(def my-acc (make-account 100))
; 2. Call 'deposit' method
; Note the double parens: (.deposit my-acc) gets the function, then we call it
(def b1 ((.deposit my-acc) 50)) ; balance is now 150
; 3. Call 'withdraw' method
(def b2 ((.withdraw my-acc) 20)) ; balance is now 130
; 4. Call 'withdraw' with invalid amount
(def error-msg ((.withdraw my-acc) 1000))
; 5. Call 'balance' getter
(def final-balance ((.balance my-acc)))
; Return summary of operations
[b1 b2 error-msg final-balance]
)