scala定义ruby中的times方法

2011-12-21 10:21:47.0

ruby中int类有个times方法,大概使用方式是:

5 times{pritln("hello world"}

将打印出5次hello world

Scala中类似的使用方法是

(1 to 5).foreach(println("hello world")

不过还是不如ruby的使用直观

下面我们可以通过scala强大的implicit 翻译过来就是隐式转换来实现这个功能,scala的隐式转换就好像JS.protype给原生类加上新的方法

implicit def intWithTimes(n: Int) = new {
def times(f: => Unit) = 1 to n foreach { i => f}
}

现在我们也可以这样使用了

5 times (pritln("xxx")

现在times方法 已经很好用了,但是我们可以更进一步times 迭达的时候吧i也传给 f函数

var i=0;
5 times {println("i:"+i);i+=1;}

现在我们迭达类似于 while 

implicit def intWithTimes(n: Int) = new {
def times(f:(Int) => Unit) = 1 to n foreach { i => f(i)}
}

ok,我们已经重新定义了我们的 times方法了

5 times(i => {prinltn(i+": hell world")})以后

以后我们只需要在我们使用times方法的类中implicit隐式转换下就可以使用times方法了,感觉就像scala的原生int自带有times方法一模一样

文章作者:POPO4J
本文地址:http://www.popo4j.com/java/ruby_times_in_scala.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!