如何使用Map Mutable签名调用Scala方法?

时间:2018-04-27 16:16:52

标签: scala methods parameters

我有一个Scala代码:

print(dfTrain.shape)
print(dfTrain2.shape)
print(test.shape)
print(test2.shape)
print(test3.shape)
print(test4.shape)

如何调用此方法?

试过这个:

import collection.mutable._

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

收到错误: myMethod(["test1", "test2"])

感谢。

1 个答案:

答案 0 :(得分:2)

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

String

您对Map("test1" -> "test2") 的声明无效:您需要为myMethodA定义实际类型,或者为它们设置通用参数(以便该方法是通用的):

B

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

// 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")

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

最后一点,我强烈建议您尽可能使用{em> immutable 版本的Map("key1" -> "value1", "key2" -> "value2", "key3" -> "value3")。如果您不熟悉函数式编程原则,这一开始看起来并不常见,但其好处是巨大的。