var products = { 'Milk 1l': 39,
'Imasi': 30,
'Bread': 45,
'Chakalaka Can': 23,
'Gold Dish Vegetable Curry Can': 17,
'Fanta 500ml': 33,
'Coke 500ml': 54,
'Cream Soda 500ml': 22,
'Iwisa Pap 5kg': 17,
'Top Class Soy Mince': 22,
'Shampoo 1 litre': 3,
'Soap Bar': 12,
'Bananas - loose': 47,
'Apples - loose': 36,
'Mixed Sweets 5s': 49 }
当我运行上面的第一个代码段时,我收到错误:for (i <- 0 to 1; c <- 0 until str.length) {
print(c + i).toChar
}
for (i <- 0 to 1; c <- 0 until str.length) yield (str(c) + i).toChar
。但是,当我使用yield运行第二个代码片段时,错误消失了。
这是因为第一个代码段中value toChar is not a member of Unit
中的statement print(c+i)
返回值block statement
而Unit
数据类型没有调用的函数Unit
?我很难弄清楚Scala中toChar
中某些内容何时返回Unit
。
答案 0 :(得分:2)
print
函数返回Unit
,所以:
print(c + i).toChar
正在尝试为toChar
找到Unit
方法(它不存在)。
你需要在里面打印
print((c + i).toChar)
# equivalently
print(c + i toChar)
答案 1 :(得分:2)
这是因为<fn>()
- 函数调用运算符的优先级高于<obj>.<field/method>
- 字段或方法访问权限,因此scala认为您要调用print(c + i) => Unit
然后调用Unit.toChar