As an exercise I tried to create an implicit conversion that would accept a function and produce a Runnable. That way you could call java methods that accept Runnables and use them like closures.
the implicit conversion is easy enough:
implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }
however I don't know how to call it. How do you pass in a no-arg function that returns Unit, without having it be evaluated at once? For example, I'd like the following to print "12" but instead it prints "21" because 'print("2")' is evaluated at once.
var savedFun : Runnable = null
def save(r : Runnable) = { savedFun = r }
save(print("2"))
print("1");
savedFun.run()
how do I tell the compiler to treat 'print("2")' as the body of a function, not something to be evaluated at once? Some possibilies I tried, such as
save(() => print("2"))
or
save(=> print("2"))
are not legal syntax.