私はScalaにとって全く新しいです。私はトークン化()メソッドの戻り値の型を宣言する必要はありませんSMLでスカラのケースクラスとリスト
abstract class Token
case class Zero extends Token
case class At extends Token
//...
object Tokenizer {
def tokenize(seq : List[Char]) : List[Token] = seq match {
case List() => error("Empty input")
case '0' :: rest => Zero :: tokenize(rest)
case '@' :: rest => At :: tokenize(rest)
//...
}
}
:今、私はポート私はスカラ座に標準MLに書いたパーサを試みると、次のコードで問題を抱えていますScalaはそれを必要としているようですが、私が提供している型は何となく幸せではありません(ゼロ、Atは無効な型で、代わりに型トークンでなければなりません)。私はまた、構文解析段階の後の時点でトークンリストに一致するようにパテントしたいことに注意してください。
ウェブ上でもstackoverflow自体でも同様の質問が以前に発生していたかどうかを調べましたが(それほど簡単ではありませんでしたが)何とか何も見つかりませんでした。私は何かの基本的な間違っを持っているかなり確信して、私を啓発すること自由に感じなさい:)
自分自身がスカラーに慣れていないので、私はなぜそれがコンパイルされないのだろうか?パターンマッチングに(自動的に生成された)コンパニオンオブジェクトを使用できないと言っていますか?もしそうなら、どうしてですか? – Droggl
@Droggl:パターンマッチングで 'Zero'を使用している場合、' Zero.unapply(...) 'メソッドが使用されます(これはケースクラスのコンパニオンオブジェクトに対しても自動的に生成されます) *パターンマッチングで 'Zero'を使います。問題は、コンパニオンオブジェクトが 'Token'クラスを拡張せず、' Zero' **クラス**だけがそれを拡張することです。そして、結果として得られる 'List'のすべての要素は' Token'クラスであると予想されます。 – tenshi