作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有什么方法可以创建PartialFunction
除了通过 case
陈述?
我很好奇,因为我想表达以下内容(前面的 scala 伪!)...
val bi = BigInt(_)
if (bi.isValidInt) bi.intValue
val toInt : PartialFunction[String, Int] = {
case s if BigInt(s).isValidInt => BigInt(s).intValue
}
BigInt
两次。
最佳答案
不确定我理解这个问题。但这是我的尝试:为什么不创建一个提取器?
object ValidBigInt {
def unapply(s: String): Option[Int] = {
val bi = BigInt(s)
if (bi.isValidInt) Some(bi.intValue) else None
}
}
val toInt: PartialFunction[String, Int] = {
case ValidBigInt(i) => i
}
PartialFunction
而不是使用
case
文字的问题):
val toInt = new PartialFunction[String, Int] {
def isDefinedAt(s: String) = BigInt(s).isValidInt
def apply(s: String) = BigInt(s).intValue
}
isDefinedAt
的结果来解决这个问题。 .如果你深入到基准测试,你会发现它比默认的 Scala 实现慢:)
isDefinedAt
的双重性质与
apply
,您应该直接使用提供
Option[Int]
的(完整)函数。结果。
关于Scala,偏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5668053/
我是一名优秀的程序员,十分优秀!