Why Ruby?
retard
re at tard.com.invalid
Sat Dec 18 13:50:26 PST 2010
Sat, 18 Dec 2010 19:09:24 +0100, Jacob Carlborg wrote:
> As Nick writes here the Scala/C#-style syntax is one suggestion. There
> are also several other syntaxes available, one just have to look at
> other languages to get ideas. Here's a list of the syntax used by a
> couple of different language, some languages are list more than once
> because they support more than one syntax. I've listed the languages in
> order from, what I think, the least verbose to the most verbose
> lambda/delegate syntax (the number in front of the languages is the
> level of verbose, if two languages are at the same level I think they
> are equally verbose).
>
> 1 D: foo(writeln(3)); // lazy argument
That's not really equivalent to lambdas. It would be unfair to not
mention Scala which also supports lazy arguments.
> 1 Scala: foo(_ * _)
This isn't the same. _ * _ is equivalent to (a, b) => a * b
1 Scala: foo(x => x * x)
> 2 C#: foo(x => x * x);
> 3 Scala: foo((x) => x * x)
foo(x => x * x) also works in this case
> 4 Python: foo(lambda x: x * x)
> 5 Ruby: foo { |bar| x * x }
Maybe you meant
foo { |x| x * x }
> 5 Ruby: foo do |x| x * x end
> 6 D: foo((int x) { return x * x; });
> 7 C++1x: foo([](int x){ return x * x; });
> 7 Apple's (Objective)-C(++)
> block extension: foo(^(int x){ return x * x; });
> 8 JavaScript:
> foo(function(x){ return x * x })
> 9 PHP: foo(function ($x) use($fooBar) {
> return $x * $x; }); // "use" is used for explicitly telling what
> variables should be available when the scope is gone.
>
> Note that I have not listed any functional languages here because I've
> never used one.
For example:
Lambda calculus: λx.x*x
Haskell: \x -> x * x
As you can see, most of the verbosity comes from the fact that lambdas in
D and C++ contain statements, not a single expression. It's like if-then-
else vs ternary ?: -- In languages like Scala these are the same built-in
feature.
More information about the Digitalmars-d
mailing list