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?-)

 

 

 

Reply via email to