請看下面的代碼編譯很好:兩個看似相同的字符串表現不同
trait ParserError
trait Parser[+A]{
def run[A](input:A):Either[ParserError, A]
}
object Parser{
case object ParserErrorImpl extends ParserError
def string(s:String):Parser[String] = new Parser[String]{
def run[String](input:String) = {
if(input == s) Right(input) else Left(ParserErrorImpl)
}
}
}
object Runner{
import Parser._
def main(args:Array[String]):Unit={
println(string("aaa").run("aaa"))
}
}
當我改變Right(input)
到Right(s)
它帶來一個編譯錯誤:
Error:(13, 58) type mismatch;
found : s.type (with underlying type String)
required: String
def run[String](input:String) = if(input == s) Right(s) else Left(ParserErrorImpl)
^
你能解釋一下爲什麼會這樣因爲它對我來說不完全清楚?
提示:無需更新與答案(實際上,它只是混淆了未來的讀者)的問題 - 只要勾選最佳答案作爲「接受」和/或upvote最好的答案。 –
佔用。刪除了該更新。 –