【问题标题】:String method to change particular element in Scala在 Scala 中更改特定元素的字符串方法
【发布时间】:2013-12-12 05:37:06
【问题描述】:

我需要在 Scala 中编写一个覆盖 toString 方法的方法。我写了它,但我还必须检查是否有一个元素为“1”,我会将其更改为“a”,否则使用字符串方法编写列表。任何建议如何做到这一点?

【问题讨论】:

  • 只是出于好奇,你在上什么课?如果这是编程初学者的课程,似乎曲线太陡了。
  • 是的,它是函数式编程和 Scala 的初学者课程
  • 是时候超越单线了。将其分解为多个 val 或 def,以便您可以看到问题出在哪里。副手,我认为第二个“列表”需要被排除在外。请记住,map 不会更改原始列表 - 它会创建一个新列表。另外,我怀疑,从错误中,你得到了一个列表列表,但你没有分享足够的信息来确定。
  • 是的,我给出了一个列表列表...因此需要更改的问题是什么?非常感谢
  • 您可以将字符串转换为字符列表。然后递归替换正确的字符。然后将其转回字符串并返回。没有什么需要做的了。

标签: string list scala overriding


【解决方案1】:

您遇到了什么错误?似乎对我有用

val l = List(1, 2, 3)
println(this)

override def toString(): String = {
  val t = l.map({
    case 1 => "a"
    case x => x
  })
  t.toString
}

打印出List(a, 2, 3)

【讨论】:

    【解决方案2】:

    我从您的问题的 cmets 中看到 listList[List[Int]]

    查看代码的开头:

    list.map { case 1 => 'a'; case x => x}
    

    map 需要一个函数,该函数将 list 的元素作为参数 - 在您的情况下为 List[Int]。但是您的代码直接在Int 上运行。

    根据这些信息,您得到的错误似乎完全正确:您声明了一个需要 Int 的方法,但您将 List[Int] 传递给它,这确实是类型不匹配。

    试试这个:

    list.map {_.map { case 1 => 'a'; case x => x}}
    

    这样,您定义的将 1 转换为 a 并不理会其他所有内容的函数将应用于 list 的子列表,并且此类型检查:您正在将期​​望 Int 的函数应用于Int.

    【讨论】:

      猜你喜欢
      • 2022-07-23
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多