// Class init
TRANSPORT = []
INDEX = -1
// defining class functions:
func SetType(trans, ...):
trans.Type = vargs(1)
return trans
end
func GetType(trans, ...):
return trans.Type
end
func GetSpeed(trans, ...):
return trans.Speed
end
func GetAcc(trans, ...):
return trans.Acc
end
func Stop(trans, ...):
trans.Speed = 0
trans.Acc = 0
return trans
end
func Go(trans, speed, acc):
trans.Speed = speed
trans.Acc = acc
return trans
end
//main class
func transport(op, ...):
temp = op(TRANSPORT[INDEX], vargs(1), vargs(2))
if temp !== [] then
return temp
else:
TRANSPORT[INDEX] = temp
return TRANSPORT[INDEX]
end
end
// function to create a new class
func new_transport():
INDEX++
TRANSPORT[INDEX] = []
TRANSPORT[INDEX].Type = void
TRANSPORT[INDEX].Speed = void
TRANSPORT[INDEX].Acc = void
return INDEX
end
// function to switch the active class:
func Select_Transport(index):
INDEX = index
end
// to Job!
AirPlane = new_transport()
transport(SetType, "airplane")
puts("transport mean N1: "+transport(GetType))
transport(Go, 300, 30)
puts("speed: "+transport(GetSpeed))
puts("acceleration: "+transport(GetAcc))
// another class!
Schoolbus = new_transport()
transport(SetType, "SchoolBus")
puts("transport mean N2: "+transport(GetType))
transport(Go, 40, 10)
puts("speed: "+transport(GetSpeed))
puts("acceleration: "+transport(GetAcc))
transport(Stop)
// switch class
Select_Transport(AirPlane)
puts("back to "+transport(GetType))
puts("speed: "+transport(GetSpeed))
puts("acceleration: "+transport(GetAcc))
// switch again
Select_Transport(Schoolbus)
puts("back to "+transport(GetType))
puts("speed: "+transport(GetSpeed))
puts("acceleration: "+transport(GetAcc))
/*
=== console output: ===
transport mean N1: airplane
speed: 300
acceleration: 30
transport mean N2: SchoolBus
speed: 40
acceleration: 10
back to airplane
speed: 300
acceleration: 30
back to SchoolBus
speed: 0
acceleration: 0
*/