Scala无法解析符号

时间:2016-11-15 17:52:52

标签: scala list mapping

目前我的系统能够让用户输入2个数字,找到并返回尾部的最后一个数字,如何才能使数据和数据2仅显示数字,而不是之前的SK1 / SK3。目前我收到了错误;

错误:(177,28)值> =不是(String,Int)的成员     val highest = if(data> = data2){

 //Compare 2 values
  def mnuCompareTwoStocks(f: (String) => (String, Int)) = {
    print("Stock > ")
    val data = f(readLine)
    print("Stock 2 > ")
    val data2 = f(readLine)
    val highest = if (data >= data2){
      println(data)
    }
    else
    {
      println(data2)
    }
    println(s"${data._1}: ${data._2} ${data2._1}: ${data2._2}")

  }

编辑: 工作成果

 //Compare 2 values
  def mnuCompareTwoStocks(f: (String) => (String, Int)) = {
    print("Stock > ")
    val data = f(readLine)
    print("Stock 2 > ")
    val data2 = f(readLine)
    if (data._2 >= data2._2){
      println("The higher stock is " + data)
    }
    else
    {
      println("The higher stock is " + data2)
    }
    println(s"${data._1}: ${data._2} ${data2._1}: ${data2._2}")

  }

2 个答案:

答案 0 :(得分:3)

您正在尝试比较(String,Int)类型的2个元组。这样没有简单的比较运算符。

scala> ("a",3) > ("b",0)
<console>:12: error: value > is not a member of (String, Int)
       ("a",3) > ("b",0)
               ^

您希望String优先还是Int

scala> ("a",3)._1 > ("b",0)._1
res0: Boolean = false

scala> ("a",3)._2 > ("b",0)._2
res1: Boolean = true

答案 1 :(得分:1)

您的代码中存在一些问题导致您看到的错误。

首先,您遇到语法错误:要按照您希望的方式打印变量最高,您需要使用+进行字符串连接:println("The higher stock is " + highest)

其次,最高仅在if语句中声明,因此它超出println语句的范围。您可以通过在范围内声明来解决此问题:

...
var highest = 0.0
if(...){
    highest = ...
}
else {
    highest = ...
}
println("The higher stock is " + highest)

最后,最重要的是,您的方法的整体设计对我来说并没有多大意义。 f mnuCompareTwoStocks 的参数,它是一个函数,可以从String转换为(String,Int)。那你为什么要在这个函数上调用 apply (通过f(readLine))并且看起来期待一个数值数据类型呢?甚至这个参数的目的是什么?如果确实想要返回元组,那么在比较值之前,您需要解包数字组件:

val data = f(readLine)
val data2 = f(readLine)
if (data._2 >= data2._2)
...

我看到你编辑了你的问题来解决前两个问题。但是,现在你用你的if语句毫无意义地设置val highest = Unit ......

无论如何,如果你想在它们之间进行数值比较,你应该解压缩元组的Int组件,如上所示。