![](/img/trans.png)
[英]Is it possible to implement F#'s infrastructure for Units of Measurement in Scala?
[英]How would one implement OCaml / F#'s “function” construct in Scala?
我在Scala中发现的一种常见趋势是这样的:
def someFunction(a: SomeClass) = a match { ... }
从那里上a
从未再使用过。 这种模式在FP中很常见,OCaml和F#有一个内置的构造,让你完全抛弃那个参数。
而不是写这个:
let someFunction a =
match a with
| 0 -> true
| _ -> false
你可以简单地写一下:
let someFunction =
function
| 0 -> true
| _ -> false
所以我的问题是,是否有可能在Scala中写这样的东西?
def someFunction = function {
case 0 => true
case _ => false
}
保存其他不必要的参数。
我试图把它写成一个带有call-by-name参数的函数,但是Scala不允许我创建一个空match
块。
可能吗? 或者scala可能已经内置了这样的东西?
使用函数而不是方法:
val someFunction: Int => Boolean = {
case 0 => true
case _ => false
}
您必须显式编写类型注释,但这不能是一个缺点 - 对于API使用它是有用的文档。
你可以使用部分功能:
def function[A, B](mf: PartialFunction[A, B]): A => B = x => mf(x)
虽然这要求你在左边指定功能的类型,例如
def someFunction: Int => Boolean = function {
case 0 => true
case _ => false
}
我找到了一种(非常难看)的方式
这是一个黑客/解决方案,而不是一个实际的解决方案,但我想我还是会在这里发布它
你可以这样做:
def something = (_: Int) match {
case 0 => true
case _ => false
}
这有效并解决了这个问题,但它写起来比我试图从一开始就摆脱的东西更丑陋和笨拙。
我很想知道你们能想出什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.