小编Zhi*_*Han的帖子

为什么Scala编译器拒绝没有前导空格的函数体?

我发现这很令人困惑.

scala> val a = (x:Boolean)=>!x
<console>:7: error: not found: value x
       val a = (x:Boolean)=>!x
                ^

scala> val a = (x:Boolean)=> !x
a: Boolean => Boolean = <function1>
Run Code Online (Sandbox Code Playgroud)

两者之间的唯一区别是空白.是因为词法分析员认为=>!是运营商吗?

scala

4
推荐指数
1
解决办法
533
查看次数

在Scala中,如何针对具有类型参数的类型测试"Any"对象的类型?

我试图获得一种类型安全的方法来转换解析JSON字符串的结果.我想检查一个字段是Map [String,any]还是普通字符串.我的第一次尝试是

def test(x:Any) = {
    x match {
        case m:Map[String,Any] => ...
        ...
}
Run Code Online (Sandbox Code Playgroud)

这导致"类型模式Map [String,Any]中的非变量类型参数String未被选中,因为它被擦除消除了"

通过TypeTag和ClassTag的文档,我找不到一个很好的方法来实现它.以下代码不会导致警告,但我想知道为什么它会起作用.

type StringMap = Map[String,Any]
def test(x:Any) = {
    x match {
        case m:StringMap => ...
        ...
}
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching type-erasure

3
推荐指数
1
解决办法
2876
查看次数

标签 统计

scala ×2

pattern-matching ×1

type-erasure ×1