Scala比较错误

时间:2016-02-11 15:58:16

标签: scala comparison

我正在尝试将字符串类型列表中的项目与整数进行比较。我试过这样做,但我得到一个错误说:

<div id="forwardCall" class="modal fade" ng-controller="CallCtrl as call">
    <div ng-show={{ call.well }}>Some content</div>
</div>

比较的代码行类似于:

'value < is not a member of List[Int]'

除了为什么会发生这种情况之外,我想知道为什么我没有收到错误 当我使用不同类型的比较时,例如'=='。

所以,如果我运行该行:

if(csvList.map(x => x(0).toInt) < someInteger)

我没有收到错误。那是为什么?

4 个答案:

答案 0 :(得分:1)

你可以参考 Why == operator and equals() behave differently for values of AnyVal in Scala

每个班级支持运营商==,但可能不支持&lt;,&gt;这些运营商。

代码

csvList.map(x => x(0).toInt)

它返回 List&lt; int&gt; ,并且应用程序使用它来与int进行比较, 所以它可以处理隐式类型转换。甚至编译器也不会将其报告为错误。一般来说,将价值与不同类型进行比较并不好。

答案 1 :(得分:1)

Private Function createCSVBody(ByVal reader As String) Try Dim sb As New System.Text.StringBuilder sb.AppendLine("SELECT * FROM NOULGB WHERE PRINT_NO=@readerno") sb.AppendLine(New OracleParameter("@readerno", OracleDbType.Char, reader, ParameterDirection.Input).ToString) Using dar As Oracle.DataAccess.Client.OracleDataReader = Ibr.DataReader(sb.ToString) While dar.Read() page_no = dar("PRINT_NO").ToString() page_no1 = dar("PAGE_NO1").ToString() End Using End Function 将整个csvList.map(x => x(0).toInt)转换为csvList,然后尝试将操作符List[Int]应用于<List[Int]存在。这基本上就是错误信息所说的内容。

someInteger没有错误,因为==存在此运算符,但List将始终返回false。

您尝试做的可能是将List[T] == Int的每个项目与List进行比较。如果是这种情况,可以这样做:

Int

答案 2 :(得分:1)

这段代码csvList.map(x => x(0).toInt)实际上返回List[Int],与整数无法比较(不确定List(1,2) < 3是什么意思)。 如果你想将列表中的每个元素与你的数字进行比较,确保它们都不如它,你实际上会写if(csvList.map(x => x.toInt).forall { _ < someInteger })

答案 3 :(得分:1)

在回答问题之前,我们先介绍一些介绍 使用REPL,您可以更加了解自己在做什么

scala> List("1", "2", "3", "33").map(x => x(0).toInt)
res1: List[Int] = List(49, 50, 51, 51)

map函数用于转换每个元素,因此地图中的x第一次为“1”,第二次为“2”,依此类推。

当您使用x(0)时,您正在访问字符串中的第一个字符。

scala> "Hello"(0)
res2: Char = H

如果您在映射字符串后看到类型,则为Int of List。你可以将它与Int进行比较,但它永远不会等于。

scala> List(1, 2, 3) == 5
res0: Boolean = false

当你尝试

时,这与Java非常相似
"Hello".equals(new Integer(1));

如果您想了解有关平等问题背后原因的更多信息,可以查看Why has Scala no type-safe equals method?

最后但并非最不重要的一点是,使用少于因为不少于List类时会出现错误。

<强>附加: 如果你想知道列表中的第二个元素是否小于2,你可以

scala> val data = List("1", "10", "20")
data: List[String] = List(1, 10, 20)
scala> 5 < data(1).toInt
res2: Boolean = true

虽然有点奇怪,但是你可能应该将字符串列表转换为类似案例类的类型,然后使用更清晰的数据模型来处理业务逻辑。