"BCS" <a...@pathlink.com> wrote in message news:78ccfa2d39bdc8cb54edb3210...@news.digitalmars.com... > Reply to Bill, > >>> I was about to say the same thing, but I think Yigal was just mixing >> two distinct suggestions together: >> 1) the trailing delegates proposal (aka ruby block) and > > I like that >
Then we're agreed on that part :) >> 2) A ruby-like syntax for delegate literals : {|a,b| return a+b;} > > I don't like that > The thing I like about that is that it makes it much more clear at a glance that the "a,b" or "int a, int b" is associated with the code block (but without the problem some languages have of making it hard to distinguish from the block's body). For the sake of syntax-consistency I would be perfectly willing to allow (or even require) functions to be defined the same way: int add { |int x, int y| return x+y; } Or: // "func" used to disambiguate between function call and function declaration func add { |int <- int x, int y | return x+y; } Or maybe parens instead of pipes (this is similar to K&R C, isn't it?): int add { (int x, int y) return x+y; } Although I'm sure any of those would be prohibitively unpopular. > > One #1 I'd be inclined to requier that the function be defined like > >> void DoIt(int delegate(int) dg...) > > D laready has this syntax for Typesafe Variadic Functions > http://www.digitalmars.com/d/1.0/function.html > I'm not quite convinced either way on this. For what reasons do you think the function header should be required to indicate "this uses block syntax"? What's wrong with just saying "If the last arg a function takes is a delegate, then that delegate can optionally be specified with block syntax."?