在单行中缓存中间变量

Par*_*bay 5 scala

我可以以某种方式缓存i.toString这个简单的函数定义吗?

def palindrome(i: Int) = i.toString == i.toString.reverse
Run Code Online (Sandbox Code Playgroud)

我想保持这个功能简单,没有经典的多线,支撑功能..

Mar*_*amy 6

你可以这样做:

def palindrome(i: Int) = ((s:String) => s == s.reverse)(i.toString)
Run Code Online (Sandbox Code Playgroud)


Rei*_*nds 6

好吧,Scala没有像一些传统函数式语言那样的let语句,但这主要是因为val + braces实现了同样的目的.您是否反对多线部分或一般支撑?因为它很难被击败:

def palindrome(i: Int) = { val s = i.toString; s == s.reverse }
Run Code Online (Sandbox Code Playgroud)

试图忽略大括号可能只会推动人物数量的增加.


kir*_*uku 5

使用正向管道运算符:

scala> implicit class PipedObject[A](value: A) {
     |   def |>[B](f: A => B): B = f(value)
     | }
defined class PipedObject

scala> def palindrome(i: Int) = i.toString |> (s => s == s.reverse)
palindrome: (i: Int)Boolean
Run Code Online (Sandbox Code Playgroud)

虽然这可以优雅地解决您的问题,但我建议将palindromefrom 的签名更改palindrome(Int)palindrome(String)并将其调用palindrome(i.toString)(并将其重命名为isPalindrome).