digitalmars.D - Re: Lambda syntax, etc
- hsyl20 <hsyl20 yahoo.fr> Feb 06 2009
You can use several "_", for instance: scala> val a = List(10,5,2,48,75,84,96,85,3,21,52) a: List[Int] = List(10, 5, 2, 48, 75, 84, 96, 85, 3, 21, 52) scala> val b = a reduceLeft (_ + _) b: Int = 481 The only problem is if you want to change arg order. In this case you have to use named parameters. scala> val b = a reduceLeft (_ - _) b: Int = -461 scala> val b = a reduceLeft ((a,b) => b - a) b: Int = -5 Cheers Sylvain
this seems counter-intuitive to me. Nemerle uses this syntax for currying which seems to me a much better meaning to this syntax. for example ( using D like syntax): int func (string a, char b, int c) { ... } auto a = func( "hello", _, 8); the above is syntax sugar for: auto a = int(char b) { return func("hello", b, 8); };
"_" is used for currying in Scala too. scala> def func (a:Int)(b:String) = {} func: (Int)(String)Unit Unit is the same thing as void in Scala. scala> func (5) _ res7: (String) => Unit = <function> scala> func (_:Int) ("blah") res15: (Int) => Unit = <function> scala> func (_) ("blah") <console>:6: error: missing parameter type for expanded function ((x$1) => func(x$1)("blah")) func (_) ("blah") (I don't know why I have to specify "Int" type. Maybe it has been corrected in the last versions.) Cheers, Sylvain
Feb 06 2009