2013-02-19 52 views
2
class Thermometer{ 

    var celsius: Float = _ 

    def fahrenheit = celsius * 9/5 + 32 
    def fahrenheit_ = (f: Float) { 
    celsius = (f-32)*5/9 
    } 

    override def toString = fahrenheit + "F/"+ celsius + "C" 
} 

引用的代码是书Programming in Scala 2nd edition中的一个示例。当我尝试编译时,出现以下错误:Scala的书中的隐式设置器和getter示例产生编译错误

scalac Thermometer.scala 
Thermometer.scala:6: error: not found: value f 
    def fahrenheit_ = (f: Float) { 
        ^

Scala不再支持隐式定义的getter和setters吗?代码中有错误吗?或者有没有新的方式来做到这一点?

回答

14

在本书中的代码实际上不包含空格字符_=之间:

enter image description here

+0

哇!谢谢。我不知道这很重要。 (在5分钟内接受) – learner 2013-02-19 17:23:17

+1

它很重要,因为=是方法名称的一部分。将_ =附加到方法名称表明它是一个设置器,它可以让你编写'x.setter = value',它将被转换为'x.setter _ =(value) – drexin 2013-02-19 17:54:29