I was never a fan of `with`. It makes it really hard to read/reason about unfamiliar code because you need to know exactly what members a type has in order to understand what is going on.
From: julia-users@googlegroups.com [mailto:julia-users@googlegroups.com] On Behalf Of Stefan Karpinski Sent: Thursday, May 21, 2015 9:22 AM To: Julia Users Subject: Re: [julia-users] Has anyone done a Pascal-style "with" statement (i.e., macro)? This seems hard to make sane in a dynamic language. The issue is that `foo` doesn't give you enough information at compile time to decide which names are fields of `foo` and which are just local variables. If the first argument to the @with macro had to be a name of a type – i.e. Foo rather than foo – then you could do it. You could loosen that up to allow any expression that can be evaluated at compile time in the global scope where the @with occurs, but that seems pretty confusing. For example, you couldn't write `@with typeof(foo)` which is pretty much the first thing that people will try to do. On Thu, May 21, 2015 at 9:13 AM, Magnus Lie Hetland <m...@idi.ntnu.no <mailto:m...@idi.ntnu.no> > wrote: A couple of decades ago, I remember using the with statement in Pascal. I have since wished for it in several languages, but I guess in Julia, it would probably be feasible without altering the language? Basically, it'd be something like type Foo a end foo = Foo(42) @with foo do a = 1 b = "frozzbozz" # ... end # foo.a is now 1 That is, let the fields of a composite type be available (syntactically) as local variables. Now, hacking together something like this wouldn't be hard – but making it really work (without weirdness or performance degradation) seems harder. And maybe it's a bad idea to begin with. Or maybe someone has already done it?-)