WEB开发网
开发学院软件开发Java 手机上的 Scala:使用 Android、Scala 和 Eclipse... 阅读

手机上的 Scala:使用 Android、Scala 和 Eclipse 创建移动应用程序

 2009-12-25 00:00:00 来源:WEB开发网   
核心提示: 这两个函数(funcToClicker 和 funcToClicker0)都被定义为隐式函数(implicit),这是 Scala 的一个方便的特性,手机上的 Scala:使用 Android、Scala 和 Eclipse 创建移动应用程序(9),它可以让编译器隐式地将一种类型转换成另一种类型

这两个函数(funcToClicker 和 funcToClicker0)都被定义为隐式函数(implicit)。这是 Scala 的一个方便的特性。它可以让编译器隐式地将一种类型转换成另一种类型。在这里,当编译器解析 Converter 类的 onCreate 方法时,它遇到一个 setOnClickListener 调用。这个方法需要一个 OnClickListener 实例。但是,编译器却发现一个函数。在报错并出现编译失败之前,编译器将检查是否存在隐式函数,允许将函数转换为 OnClickListener。由于确实还有这样的函数,所以它执行转换,编译成功。现在,我们理解了如何使用 Android 中的闭包,接下来更仔细地看看应用程序逻辑 — 特别是,如何执行单位转换计算。

单位转换和计算

我们回到清单 4。传入 onClickListener 的函数收到用户输入的度量单位和值。然后,它创建一个 Measurement 实例,并将该实例传递到一个 UnitsConverter 对象。清单 6 显示相应的代码。


清单 6. Measurement 和 UnitsConverter
case class Measurement(uom:String, amount:Double) 
 
object UnitsConverter{ 
   // constants 
  val lbToKg = 0.45359237D 
   val ozToG = 28.3495231 
   val fOzToMl = 29.5735296 
   val galToL = 3.78541178 
   val milesToKm = 1.609344 
   val inchToCm = 2.54  
  
   def convert (measure:Measurement)= measure.uom match { 
     case "Fahrenheit" => (5.0/9.0)*(measure.amount - 32.0) + " C" 
      case "Pounds" => lbToKg*measure.amount + " kg" 
      case "Ounces" => ozToG*measure.amount + " g" 
      case "Fluid Ounces" => fOzToMl*measure.amount + " mL" 
      case "Gallons" => galToL*measure.amount + " L" 
      case "Miles" => milesToKm*measure.amount + " km" 
      case "Inches" => inchToCm*measure.amount + " cm" 
      case "Celsius" => (9.0/5.0*measure.amount + 32.0) + " F" 
      case "Kilograms" => measure.amount/lbToKg + " lbs" 
      case "Grams" => measure.amount/ozToG + " oz" 
      case "Millileters" => measure.amount/fOzToMl + " fl. oz." 
      case "Liters" => measure.amount/galToL + " gallons" 
      case "Kilometers" => measure.amount/milesToKm + " miles" 
      case "Centimeters" => measure.amount/inchToCm + " inches" 
      case _ => "" 
   } 
} 

上一页  4 5 6 7 8 9 10  下一页

Tags:手机 Scala 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接