6
我在使用文件Units.scala中定義的metascala中的測量單位功能進行工作時遇到了問題。使用類型級計算時輸入推理/類型檢查失敗
對於這個問題的其餘部分,我將使用一個簡化的方案,只有一個單位類型,長度。
那麼,在現實中一種看起來像
Quantity[_1, _0, _0, _0, _0, _0, _0]
^^^^^^^
| | | | | | |
| Mass | Crncy.| Mol |
Length Time Temp. Lum.Intensity
這將足以證明問題:
Quantity[_1]
^
|
Length
只要型需要進行推斷,麻煩開始。
考慮這個例子(也有看代碼UnitsTest.scala):
val length: Quantity[_1] = m(5)
val area: Quantity[_2] = length * length // (1) Works
val dist: Quantity[_1] = area/length // (2) Doesn't work!
我得到一個錯誤在最後一行說:
type mismatch;
found :
scalax.units.Units.Quantity[
scalax.units.Subtractables.-[
scalax.units.Integers._2,
scalax.units.Integers._1
]
]
required:
scalax.units.Units.Quantity[
scalax.units.Integers._1
]
它看起來像編譯器可以」當「減去一個維度」時,例如當前的類型等於Quantity[_1]
。 G。從區域去DIST像(1)
:
Quantity[_2 - _1] <<not equal to>> Quantity[_1]
混亂的事情是,它在「增加一個層面」電子工程。 G。在(2)
從長打算面積,如:。
Quantity[_1 + _1] <<equal to>> Quantity[_2]
(對不起,這裏沒有粘貼整個代碼,它只是太多我竭力把我的例子,但我沒這就是爲什麼我只是鏈接。 )
是的,這是修復。我已經向MetaScala回購提交了兩個修復程序。 –