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
版权所有 © 转载时必须以链接形式注明作者和原始出处!