Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
Drexel University or The Math Forum.
|
|
|
|
Odd edge-case behavior of Block
Posted:
Feb 27, 2013 11:43 PM
|
|
Block is used to localize the variable cache as used in the function g when called from the function f. In f the cache symbol to use is passed in as the second parameter z. f[a_, z_] := Block[{cache = z}, g[a]]; g[a_] := (Print["hash" -> Hash[cache]]; cache[1] = a; cache[1]);
Everything works as expected... Hash[z] 2065959314 (your number may be different)
Calling f... f[1, z] hash->2065959314 (same) 1
The symbol z now has a single downvalue... DownValues[z] {HoldPattern[z[1]] :> 1}
However what if I actually want to use the symbol cache as the cache symbol...
Hash[cache] 1028301578 (your number may be different)
Calling f... f[1, cache] hash->1028301578 (same) 1
Nothing stored in the cache this time? DownValues[cache] {}
My theory is that Block[{cache = cache},... effectively localizes cache to a local temporary variable but that doesn't explain why I see the right Hash for the symbol inside g.
|
|
|
|