Message Boards Message Boards

0
|
7449 Views
|
3 Replies
|
0 Total Likes
View groups...
Share
Share this post:

Using Echo with Lexical Scoping Constructs

Posted 4 years ago

Hello All, I would like to use Echo to debug user-defined functions which are called up by Manipulate but have found that Manipulate suppresses the Echo. To give an example, the following works fine:

echoFn[x_] := Module[{},
  Table[Echo[y], {y, 1, x}]
  ]
    echoFn[10];

However, when I insert the "echoFn" inside a function with lexical scoping such as Manipulate, as expected the Echo is suppressed (see attached Notebook).

echoFn[x_] := Module[{},
  Table[Echo[y], {y, 1, x}]
  ]
Manipulate[
 echoFn[tmp], 
 Control[{{tmp, 5, "tst1"}, 1, 10, 1, Appearance -> "Labeled", 
   ImageSize -> "Small"}]
 ]

Can anyone think of a work around for this?

Many thanks.

3 Replies
Posted 4 years ago

I have found that I can reduce (not eliminate) the need to debug my functions in this way by using unit tests as part of a more test driven approach.

Mathematica supports test driven approaches using a "Testing Notebook" under:

File | New | Programmatic Notebook

If you would rather keep your unit tests closer to your code, you can include VerificationTest

In addition to unit tests, I also find asserts and checks useful.

Thanks for the great question.

POSTED BY: Mike Besso

Hi Mike,

Apologies for the delayed response but many thanks for the great tips. I hadn't come across the programmatic notebook nor the in-built verification tests before.

Many thanks,

Archie

Maybe this does what you want?

DynamicModule[{tmp},
  Row[{ "tst1"
    , Spacer[4]
    , Slider[
        Dynamic[tmp
          , (tmp = #; Echo[tmp]) &
         ]
        , {1, 5, 1}
        , Appearance -> "Labeled", ImageSize -> "Small"]
      }
  ]
]
POSTED BY: Rolf Mertig
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract