我在scala中写了这个,它不会编译:
class TestDoubleDef{
def foo(p:List[String]) = {}
def foo(p:List[Int]) = {}
}
Run Code Online (Sandbox Code Playgroud)
编译通知:
[error] double definition:
[error] method foo:(List[String])Unit and
[error] method foo:(List[Int])Unit at line 120
[error] have same type after erasure: (List)Unit
Run Code Online (Sandbox Code Playgroud)
我知道JVM没有对泛型的原生支持,所以我理解这个错误.
我可以写包装List[String]
,List[Int]
但我很懒:)
我很怀疑,但是,有没有另一种方式表达List[String]
不是同一种类型List[Int]
?
谢谢.
我可以将变量作为多值参数传递:
scala> <b/>
res26: scala.xml.Elem = <b></b>
scala> Elem(null,"a",Null,TopScope,res26)
res27: scala.xml.Elem = <a><b></b></a>
Run Code Online (Sandbox Code Playgroud)
但我无法将XML文本作为多值参数传递:
scala> Elem(null,"a",Null,TopScope,<b/>)
<console>:12: error: not found: value <
Elem(null,"a",Null,TopScope,<b/>)
Run Code Online (Sandbox Code Playgroud)
但我可以将XML文本作为简单参数传递
scala> def bar(s:String,n:Elem) = s+n.toString
bar: (s: String, n: scala.xml.Elem)java.lang.String
scala> bar("super ", <a/>)
res30: java.lang.String = super <a></a>
Run Code Online (Sandbox Code Playgroud)
?
谢谢
为什么这里有匹配:
scala> """\bdog\b""".r
res65: scala.util.matching.Regex = \bdog\b
scala> res65.findFirstIn(" The dog plays in the yard")
res66: Option[String] = Some(dog)
Run Code Online (Sandbox Code Playgroud)
但不是这里:
scala> "The dog plays in the yard".matches("""\bdog\b""")
res67: Boolean = false
Run Code Online (Sandbox Code Playgroud)
?