2015-09-04 5 views
0

У меня возникли проблемы в моем коде огранка, я попытался следующий подходЗубило Ошибка программирования

deqReg   := Cat((0 until ports).map(ownReg === Cat(io.configVal(portBits*(_) + 2),io.configVal(portBits*(_)+ 1), io.configVal(portBits*(_))))) 

, но я получаю следующее сообщение об ошибке при выполнении приведенного выше кода

[error] /home/jayant/Dropbox/FIFO/fifo.scala:24: missing parameter type for expanded function ((x$1) => portBits.$times(x$1).$plus(2)) 
[error]  deqReg   := Cat((0 until ports).map(ownReg === Cat(io.configVal(portBits*(_) + 2),io.configVal(portBits*(_)+ 1), io.configVal(portBits*(_))))) 
[error]                     ^
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 
[error] Total time: 2 s, completed 4 Sep, 2015 12:31:40 PM 

может любой скажите, что это за ошибка и как ее исправить.

ответ

2

У вас есть несколько вложенных функций на вашей карте, что сделало бы невозможным компилятор Scala вывести тип аргумента. Другими словами, вы не можете использовать здесь «_». Заполнитель просто заменяет аргумент самой внутренней функции внутри выражения. Попробуйте полностью указанную анонимную функцию (или частичную функцию), как это:

deqReg := Cat((0 until ports).map{ case i:Int => ownReg === Cat(io.configVal(portBits*i + 2), io.configVal(portBits*i + 1), io.configVal(portBits*i))}) 

Scala является довольно мощным языком и вы, скорее всего, быть в состоянии найти более удобный способ, чтобы написать этот код.

+0

Спасибо, это действительно сработало для меня. –

+0

Приветствую вас :) Будет ли у вас возможность принять ответ? Дайте мне знать, если вам нужна дополнительная информация! – Kamyar