Re: Re: Dynamically set variable name and value
- To: mathgroup at smc.vnet.net
- Subject: [mg108237] Re: [mg108182] Re: Dynamically set variable name and value
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Thu, 11 Mar 2010 06:37:24 -0500 (EST)
- References: <hn5c8h$7nc$1@smc.vnet.net> <201003100643.BAA02884@smc.vnet.net> <1196C3CC-6B4E-4F42-9E73-40FA7EA577A2@mac.com>
Hi,
> Albert: That did it, thank you. Thank you also for your words of
> caution - I can see how its use could become problematic. I am
> trying to build an application for non mathematica users and I wanted
> the user to have the ability to create their own variables in the
> same manner one can define a named range in excel.
for such an application I would probably put those user defined
variables in an own Context (namespace), so they won't conflict with
anything else, e.g. like so:
toExpression[varname_String, rest___] :=
ToExpression["UserContext`" <> varname, rest];
toExpression[x_, ___] := x;
DynamicModule[{varname = None},
Column[{
InputField[Dynamic[varname], String],
InputField[Dynamic[
toExpression[
varname], (If[StringQ[varname],
Set @@ Append[toExpression[varname, InputForm, Hold], #]]) &],
Number
],
Dynamic[varname -> toExpression[varname]]
}]
]
Evaluating the following will show that Global`test is not set,
UserContext`test is:
test
UserContext`test
you also have the advantage that it is really easy to get a list of the
variable names that have already been defined:
Names["UserContext`*"]
hth,
albert
- References:
- Re: Dynamically set variable name and value
- From: Albert Retey <awnl@gmx-topmail.de>
- Re: Dynamically set variable name and value