+1 for "do function(f)" --Tim
On Monday, April 28, 2014 11:11:58 AM Kevin Squire wrote: > On Mon, Apr 28, 2014 at 10:58 AM, Jason Grout > > <jason-s...@creativetrax.com>wrote: > > On 4/28/14, 12:53, Simon Byrne wrote: > >> On Monday, 28 April 2014 17:06:37 UTC+1, Simon Byrne wrote: > >> My own perspective is that this is due to two reasons > >> > >> 1) `do` is the only (non-macro) construction that rewrites > >> expressions i.e. > >> > >> open("outfile", "w") do f > >> > >> write(f, data) > >> > >> end > >> > >> does not (directly at least) call the method `open("outfile", "w")` > >> > >> Also, the fact that rewriting occurs due to a term that appears *after* > >> a completed expression I think adds to the confusion. Perhaps this would > >> be less confusing if some indicator had to appear before the `open` > >> statement. For example, we could have a macro: > >> > >> @do open("outfile", "w") f begin > >> > >> write(f, data) > >> > >> end > > > > Then we're almost to the python syntax: > > > > with open("outfile", "w") as f: > > f.write(data) > > Since the actually functionality of `do` is passing the block as an > anonymous function to `open` et al., this doesn't always work. Consider > > get!(mydict, "key") do > f(key) > end > > This is equivalent to > > get!(()->f(key), mydict, "key") > > It's unclear to me how this would work using Python's "with ... as" syntax. > > I was also confused by the do syntax at first. In particular, it's unclear > to me that the block is an anonymous function, and I'd prefer that be made > explicit. Maybe something like > > open("outfile", "w") do (f) -> write(f, data) > > or > > open("outfile", "w") do function(f) > write(f, data) > end > > It's more verbose, but I'd argue it's also clearer. The `get!` example > would then be > > get!(mydict, "key") do () -> f(key) > > or > > get!(mydict, "key) do function() > f(key) > end > > > Cheers, > > Kevin