Scoping with Module
- To: mathgroup at smc.vnet.net
- Subject: [mg109585] Scoping with Module
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Thu, 6 May 2010 04:52:49 -0400 (EDT)
Hi, I cannot explain the following behaviour of Module. Maybe someone else can: in the global scope f[t_] = t; DownValues[f] results in {HoldPattern[f[t_]] :> t} as expected. Simply wrapping it with Module, without making f lokal does not change this behaviour. Module[{}, f[t_] = t; DownValues[f] ] results still in {HoldPattern[f[t_]] :> t}. Say I want to replace the right side of the definition with a rule r = {t :> 1}; f[t_] = t /. r; DownValues[f] and we get {HoldPattern[f[t_]] :> 1} Module[{}, r = {t :> 1}; f[t_] = t /. r; DownValues[f] ] still the expected result {HoldPattern[f[t_]] :> 1} Now (sorry for the lengthy introduction) making r lokal Module[{r}, r = {t :> 1}; f[t_] = t /. r; DownValues[f] ] and we get {HoldPattern[f[t$_]] :> t$}. The Pattern t_ was renamed before the replacement could act. Using the local variable r to set a global r2 and it's working again. Module[{r}, r = {t :> 1}; r2 = r; f[t_] = t /. r2; DownValues[f] ] So there must be at least one thing about Module I did'nt understand. I thought the main difference between Block and Module is the lexical scoping!? But the only thing which was renamed is the lokal usage of r. Any ideas? Cheers Patrick 7.0 for Mac OS X x86 (64-bit) (February 19, 2009)