Allow multiple object to be declared with the same variable name without deleting the previous one (/!\ BREAKS SYNTAX WITHOUT $, which was completly removed from documentation)
Also, updating copyright
This commit is contained in:
parent
7663b31788
commit
82038ce35d
2 changed files with 20 additions and 12 deletions
|
@ -92,14 +92,12 @@ Example.Object obj1 "Test"
|
||||||
You can then call it's functions.
|
You can then call it's functions.
|
||||||
```bash
|
```bash
|
||||||
$obj1.print
|
$obj1.print
|
||||||
obj1.print
|
|
||||||
```
|
```
|
||||||
**NOTE**: The $ is not mandatory, but is recommanded for clarity.
|
|
||||||
|
|
||||||
... or access and edit it's properties.
|
... or access and edit it's properties.
|
||||||
```bash
|
```bash
|
||||||
name=$(obj1.name)
|
name=$($obj1.name)
|
||||||
obj1.name = "New name"
|
$obj1.name = "New name"
|
||||||
```
|
```
|
||||||
|
|
||||||
You can store objects in variables as a string. For example, you can have have objects as class arguments, function returs or arrays of objects like this:
|
You can store objects in variables as a string. For example, you can have have objects as class arguments, function returs or arrays of objects like this:
|
||||||
|
|
26
oop.sh
26
oop.sh
|
@ -1,6 +1,6 @@
|
||||||
#
|
#
|
||||||
# BashOOP - Simple OOP implementation for bash.
|
# BashOOP - Simple OOP implementation for bash.
|
||||||
# Copyright (C) 2021 Ad5001 <mail@ad5001.eu>
|
# Copyright (C) 2022 Ad5001 <mail@ad5001.eu>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Lesser General Public License as published by
|
# it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
@ -24,6 +24,12 @@
|
||||||
_namespace=""
|
_namespace=""
|
||||||
_namespacePath=$(realpath $(dirname ${BASH_SOURCE[0]}))
|
_namespacePath=$(realpath $(dirname ${BASH_SOURCE[0]}))
|
||||||
|
|
||||||
|
# Allows the creation of temporary, unique names for variables so that
|
||||||
|
# when declaring a new object with the same variable name, the previous one wouldn't be overwritten with
|
||||||
|
# the new object.
|
||||||
|
# However, this disallows the syntax that doesn't use $ at first, which makes the documentation clearer.
|
||||||
|
_counter=0
|
||||||
|
|
||||||
# This dictionnary saves all classes for each namespace so they can be retreived and aliased.
|
# This dictionnary saves all classes for each namespace so they can be retreived and aliased.
|
||||||
declare -Ag _namespacesClasses
|
declare -Ag _namespacesClasses
|
||||||
# This dictionnary links all files for static namespaces.
|
# This dictionnary links all files for static namespaces.
|
||||||
|
@ -93,17 +99,21 @@ _createObject() {
|
||||||
varName=$3
|
varName=$3
|
||||||
constructorArguments="${@:4}"
|
constructorArguments="${@:4}"
|
||||||
|
|
||||||
|
# Get a temporary variable. It's equivalent to the memory space in bash of the object.
|
||||||
|
varTmpName="_obj${_counter}"
|
||||||
|
_counter=$((_counter + 1))
|
||||||
|
|
||||||
# Declare dummy constructor.
|
# Declare dummy constructor.
|
||||||
eval "$varName.constructor() { :; }"
|
eval "$varTmpName.constructor() { :; }"
|
||||||
# Declare base properties.
|
# Declare base properties.
|
||||||
eval "$varName.type() { echo $type; }"
|
eval "$varTmpName.type() { echo $type; }"
|
||||||
eval "$varName.source() { echo $associatedFile; }"
|
eval "$varTmpName.source() { echo $associatedFile; }"
|
||||||
# Create property array.
|
# Create property array.
|
||||||
createPropertyHolder $varName
|
createPropertyHolder $varTmpName
|
||||||
# alias the "varName" variable to itself, so that it can be used and transmitted in other variables (e.g: $varName.name would alias to varName.name)
|
# alias the "varTmpName" variable to itself, so that it can be used and transmitted in other variables (e.g: $varName.name would alias to varTmpName.name)
|
||||||
eval "$varName='$varName'"
|
eval "$varName='$varTmpName'"
|
||||||
# Imports the file and replace all "<Type>." with the variable name.
|
# Imports the file and replace all "<Type>." with the variable name.
|
||||||
. <(sed s/this\\./$varName./g <(sed s/$type\\./$varName./g $associatedFile))
|
. <(sed s/this\\./$varTmpName./g <(sed s/$type\\./$varTmpName./g $associatedFile))
|
||||||
# Call the constructor
|
# Call the constructor
|
||||||
$varName.constructor $constructorArguments
|
$varName.constructor $constructorArguments
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue