【问题标题】:How to call Scala method with Map Mutable signature?如何使用 Map Mutable 签名调用 Scala 方法?
【发布时间】:2018-10-08 13:00:14
【问题描述】:

我有一个 Scala 代码:

import collection.mutable._

def myMethod(mycollection: Map[A, B]) = {
    ...
  }

如何调用这个方法?

试过这个:

myMethod(["test1", "test2"])

出现错误: Identifier expected but 'def' found

谢谢。

【问题讨论】:

  • 你可以像这样使用它 myMethod(mutable.Map[A, B]) 其中map的键是A类型,值是B类型

标签: scala methods parameters


【解决方案1】:

Map 是一种将(某种类型的K)映射到一个(某种类型的V)的数据结构。在 Scala 中,这样的一对可以用语法key -> value 来表示。如果您的意图是拥有一个映射到“test2”的String 值的String 键“test1”,那么您可以执行以下操作:

Map("test1" -> "test2")

您对myMethod 的声明无效:您需要为AB 定义实际类型,或者为您的方法设置通用参数(以便该方法是通用的):

// With specific types (assuming both keys and values have String types):
def myMethod(mycollection: Map[String, String]) = //...

// In generic form (allows any key type A, or value type B):
def myMethod[A, B](mycollection: Map[A, B]) = //...

无论哪种方式,您都可以在调用您的方法时使用结果作为参数,如下所示:

myMethod(Map("test1" -> "test2"))

需要注意的几点:

  • 在定义泛型类型参数或指定用作类型参数的类型时使用方括号。
  • 类型参数可以从提供的值推断。例如Map("test1" -> "test2") 使用String 作为键和值的类型,等效于Map[String, String]("test1" -> "test2")
  • 如果您需要多个键/值对,请用逗号分隔符列出它们,例如:Map("key1" -> "value1", "key2" -> "value2", "key3" -> "value3")

我强烈建议您阅读一本关于 Scala 的好书,例如 Odersky, Spoon & Venners 的优秀 Programming in Scala, 3rd Edition,以熟悉其语法和标准库。 p>

最后一点,我强烈建议您尽可能使用Map不可变 版本。如果您不熟悉 函数式编程 原则,乍一看这似乎很不寻常,但好处是巨大的。

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2015-03-18
    • 2018-05-07
    • 2012-08-04
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多