在kotlin中,您可以使用fun alphabet() = with(StringBuilder()) {
for (letter in 'A'..'Z') {
append(letter)
}
append("\nNow I know the alphabet!")
toString()
}
接收函数来实现以下目标:
StringBuilder
因此您不必重复{{1}}个对象。我想知道在Scala中执行它的语法是什么?
答案 0 :(得分:2)
它与Scala中的导入大致相同(就我的例子而言)。
def alphabet = {
val builder = new StringBuilder
import builder._
for(letter <- 'A' to 'Z') append(letter)
append("\nNow I know the alphabet!")
mkString // toString would be ambiguous unfortunately
}
或者您可以使用两种扩展方法寻求更具功能性的方法。我们称他们为tap
和pipe
。
implicit class TapExtensions[A](private val a: A) extends AnyVal {
def tap[B](f: A => B): A = { f(a); a }
def pipe[B](f: A => B): B = f(a)
}
def alphabet =
new StringBuilder()
.tap( b => for(letter <- 'A' to 'Z') b.append(letter) )
.tap( _.append("\nNow I know the alphabet!") )
.pipe( _.toString )
答案 1 :(得分:1)
典型功能.foldLeft
是您在scala中需要的
('A' to 'Z')
.foldLeft(new StringBuilder)((a, b) => a append b)
.append("\nNow I know the alphabet!")
或+
代替append
,
('A' to 'Z')
.foldLeft(new StringBuilder)((a, b) => a + b)
+ "\nNow I know the alphabet!"
输出
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Now I know the alphabet!
答案 2 :(得分:0)
对于特定任务,您还可以使用mkString函数获取所需的结果 这就是你能做的事情
('A' to 'Z').mkString("") +
"\nNow I know the alphabet!"
输出:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Now I know the alphabet!
希望这有帮助!