lambda()
{
# Save orignal function
local ORIGINAL=$(declare -f otl)
local SHIFT_SIZE=${1}
shift
local vars=()
for ((i=0;i<${SHIFT_SIZE};i++)); do
vars+=(${1})
shift
done
eval "otl() { $@; }"
otl ${vars[@]}
unset -f otl
eval "${ORIGINAL}"
}
accept_lambda()
{
declare -a argAry1=("${!1}")
echo "${argAry1[@]}"
lambda ${argAry1[@]}
}
test_passing() {
echo "Test passing lambda"
local lamdef=(3 "test" "lambda" "pass" 'echo $3 $2 $1')
echo "Passing ${lamdef[@]}"
accept_lambda lamdef[@]
}
returns_callback(){
lamdef=(3 test call back 'echo $3 $2 $1')
echo "${lamdef[@]}"
}
test_callbacks(){
echo "Test callback"
local lamdef=($(returns_callback))
echo "Got callback: ${lamdef[@]}"
lambda ${lamdef[@]}
}
echo "Test lambda call"
lambda 3 ro sham bo 'echo $3 $2 $1'
test_passing
test_callbacks