On Mar 9, 2012, at 5:05 PM, Dar Scott wrote:

> Maybe the array could be global (or passed as a parameter) and the subscript 
> passed. ... There might be problems I don't see right off, such as access to 
> the same array at two different levels at the same time. 


Hi, Dar.  LC has a way to get and set a node at any level of an array, without 
code that concatenates [ ] to specify the node.  In an array reference a single 
[ ] can enclose an array of keys, as you can see in the code below.  Put the 
following into a button and click it.  The code invokes the debugger so you can 
see the array and the result string on the variables tab.

I agree it'd be good if LC could accept any array reference for invoking a 
handler that specifies pass-by-reference.  Pete, I'd be glad to vote for your 
enhancement request.

-- Dick


<script>
on mouseUp
   local tArray, tString
   put 4 into tArray[ 1 ][ 2 ][ 3 ]
   put getNodeViaListOfKeys( tArray, ( 1, 2, 3 )) after tString -- that is, get 
tArray[ 1 ][ 2 ][ 3 ]
   setNodeViaListOfKeys tArray, ( 5, 6, 7, 8 ), 9 -- that is, put 9 into 
tArray[ 5 ][ 6 ][ 7 ][ 8 ]
   put comma & getNodeViaListOfKeys( tArray, ( 5, 6, 7, 8 )) after tString -- 
4,9
   breakpoint
end mouseUp

function getNodeViaListOfKeys @pArray, pList
   local tKeys
   put pList into tKeys
   split tKeys by comma and null
   return getNodeViaArrayOfKeys( pArray, tKeys )
end getNodeViaListOfKeys

function getNodeViaArrayOfKeys @pArray, @pKeysArray
   return pArray[ pKeysArray ]
end getNodeViaArrayOfKeys

command setNodeViaListOfKeys @rArray, pList, pValue
   local tKeys
   put pList into tKeys
   split tKeys by comma and null
   setNodeViaArrayOfKeys rArray, tKeys, pValue
end setNodeViaListOfKeys

command setNodeViaArrayOfKeys @rArray, @pKeysArray, @pValue
   put pValue into rArray[ pKeysArray ]
end setNodeViaArrayOfKeys
</script>

_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to