我正在爲較小的序列化寫一個自定義的樹/圖容器,並且我得到一個編譯器錯誤,顯然增加了一些內容以產生一個Int。從Int到Int映射從Short到Int定義的Scala`+`functor?
def traverse(tree : Tree, level : Short = 0, pos : Short = 0) {
buf(level) += tree
var pos : Short = -1
tree.getChildrenAsList.iterator().foreach { z=>
pos += 1
traverse(z, level + 1 ,pos)
}
}
[error] /Users/hassan/code/scala/avro/src/main/scala/edu/hsyed/nlp/MyTree.scala:33: type mismatch;
[error] found : Int
[error] required: Short
[error] traverse(z, level + 1 ,pos)
我不得不這樣做,這似乎是因爲Scala的令人印象深刻的類型推演的有點不尋常:
def traverse(tree : Tree, level : Short = 0, pos : Short = 0) {
buf(level) += tree
var pos : Short = -1
tree.getChildrenAsList.iterator().foreach { z=>
pos = (pos + 1).toShort
traverse(z, (level + 1).toShort ,pos)
}
}
編輯
啊哈,問題是,我怎麼弄在這附近?
這看起來像[Java的原始數值shenanigans](http://stackoverflow.com/questions/2720738/java-short-and-casting)的後果。 –