2
$\begingroup$

I want a function that works like in the following example: it gets an expression which contains a variable var and evaluate it setting setting var = value.

I used Block to avoid expr being evaluated if variable var holds a value in the notebook. It seems that my function works correctly - I made also a trace - but I get var inside block coloured red and I think it's a warning from Mathematica. Can you explain to me why I obtain it? Is my code wrong? Is there a better way to obtain the desired behavior?

SetAttributes[myFunc, HoldFirst];

myFunc[{expr_, var_}, value_] :=
  Block[{var}, expr /. var :> value]

picture

$\endgroup$
3
  • $\begingroup$ There is nothing to worry about in this particular case. The only thing I would change here for some extra check is the function's signature, to be myFunc[{expr_, var_Symbol}, value_]. $\endgroup$ Commented Apr 5, 2013 at 10:37
  • $\begingroup$ added picture for posterity - delete if you don't want it! $\endgroup$
    – cormullion
    Commented Apr 5, 2013 at 10:41
  • $\begingroup$ Thanks for your replies. With the picture the question is more clear $\endgroup$
    – Betelgeuse
    Commented Apr 6, 2013 at 5:44

1 Answer 1

2
$\begingroup$

The coloring is there to tell you of a possible conflict. Your function will be replacing var in both the Block and RuleDelayed with whatever you use as the second term of the first argument. It's possible that this is exactly what you intend, but it is usually not, hence the highlighting to warn.

If you give an example of the use of your function I can more specifically tell you how to handle it.

$\endgroup$
1
  • $\begingroup$ Thanksks for replying Mr Wizard. I thi nk in my case I just can ignore the warning because the behaviour I obtain is what I want $\endgroup$
    – Betelgeuse
    Commented Apr 6, 2013 at 5:52

Not the answer you're looking for? Browse other questions tagged or ask your own question.