"I don't see where Ruby syntax is particularly more concise than C# 3's."
1.upto(10).each{|x| print x}
I'm curious - how would you print 1 through 10 in C# 3 by comparison?
1.upto(10).each{|x| print x}
I'm curious - how would you print 1 through 10 in C# 3 by comparison?
(1).UpTo(10).ForEach(x => Console.WriteLine(x));
Of course, "UpTo" requires first extending int, which is trivial: public static class IntExtensions {
public static List<int> UpTo(this int start, int end) {
var range = new List<int>();
for(int i = start; i < end; i++) {
range.Add(i);
}
return range;
}
} p *1..10
Edit: you may need to do a "require 'pp'" first. def print[T] (value:T) = System.out.println(value)
1.until(10).foreach(x => print x)
This is a fairly uninteresting example, however. Something more interesting would be, for instance, the use of structural types to implement type-checked duck typing.Scala example:
// Declare a structural type for any class implementing close()
type Closable = {def close(): Any}
// Executes the provided function with the given
// closable generator, creating a new instance which
// will then be closed on completion. The provided
// function's value will be returned.
def withClosable[T, C <: Closable] (c: => C) (f: (C) => T) = {
val closable = c
try {
f(closable)
} finally {
closable.close
}
}
// Example usage
def usage = {
val updated = withClosable(db.openConnection) { conn =>
conn.update("INSERT INTO example VALUES (...")
}
System.out.println("Rows updated: " + updated)
}
This could be compared with Python's new 'with' syntax. 1 to 10 foreach println
Which seems more concise than the equivalent Ruby to me. Feh. for i in range(1,11): print i
Python FTW? ;) for x in range(1, 10): print xfor x in 1..10; print x end