Scala字符串*类型(在函数参数中)
我有以下方法:Scala字符串*类型(在函数参数中),scala,syntax,Scala,Syntax,我有以下方法: def m(a: String*) = { // ... } 我想知道星号(*)符号在这种语法中有什么用途?我对Scala显然是新手。我在谷歌上搜索过,但可能搜索错了。感谢您的帮助 干杯 这是定义采用可变参数数的方法的语法 def concat(strs: String*): String = strs.foldLeft("")(_ ++ _) 您的m方法可以接受0、1或更多参数,这些都是有效的调用: m() m("hello") m("hello", "world") 如
def m(a: String*) = { // ... }
我想知道星号(*)符号在这种语法中有什么用途?我对Scala显然是新手。我在谷歌上搜索过,但可能搜索错了。感谢您的帮助
干杯 这是定义采用可变参数数的方法的语法
def concat(strs: String*): String = strs.foldLeft("")(_ ++ _)
您的m
方法可以接受0、1或更多参数,这些都是有效的调用:
m()
m("hello")
m("hello", "world")
如果使用适当的类型提示,还可以将集合传递给该方法:
val words = Seq("hello", "world")
m(words: _*)
您可以使用这段代码(在这里,我将
m
实现为输入字符串的串联)。这是定义采用可变参数数的方法的语法
def concat(strs: String*): String = strs.foldLeft("")(_ ++ _)
您的m
方法可以接受0、1或更多参数,这些都是有效的调用:
m()
m("hello")
m("hello", "world")
如果使用适当的类型提示,还可以将集合传递给该方法:
val words = Seq("hello", "world")
m(words: _*)
您可以使用这段代码(在这里我实现了m
作为输入字符串的串联)。它被称为“var args”(变量参数)
Scala REPL
它被称为“var args”(变量参数)
Scala REPL
这被称为一个
重复参数允许方法采用相同类型的未指定数量的参数T
,这些参数可在绑定到Seq[T]
类型参数的方法体内部访问
在您的情况下,在方法m
中,参数a
将绑定到aSeq[String]
这称为a
重复参数允许方法采用相同类型的未指定数量的参数T
,这些参数可在绑定到Seq[T]
类型参数的方法体内部访问
在您的情况下,在方法
m
中,参数a
将绑定到一个Seq[String]
的可能重复项,我不认为它是这个问题的重复项。这样做会产生误导,因为您的链接描述了一种情况,即有人知道这是一个var len arg列表,而我目前不知道。可能重复的我不会称之为这个问题的重复。这样做会产生误导,因为您的链接描述了一种情况,即有人知道这是一个var len arg列表,而我当时不知道。谢谢,就是这样。我非常了解这个概念,但不幸的是,我只阅读了scala的一个教程,而且已经是几个月前的事了。如果我再看一遍,就足够了。不幸的是,我愚蠢地假设它是一个类型:$@hummingBird您可以很容易地通过单独尝试来确定它是否是一个类型构造函数:type a=(Int*)
不编译。顺便说一下:typea=(=>Int)
也不会编译。所以,这些东西不是类型构造函数,而是决定方法如何接收参数的修饰符。如果它解决了你的问题,你能接受答案吗?@Andreytukin谢谢你的解释。我实际上点击了好几次,但你不能接受一个感谢的回答,就是这样。我非常了解这个概念,但不幸的是,我只阅读了scala的一个教程,而且已经是几个月前的事了。如果我再看一遍,就足够了。不幸的是,我愚蠢地假设它是一个类型:$@hummingBird您可以很容易地通过单独尝试来确定它是否是一个类型构造函数:type a=(Int*)
不编译。顺便说一下:typea=(=>Int)
也不会编译。所以,这些东西不是类型构造函数,而是决定方法如何接收参数的修饰符。如果它解决了你的问题,你能接受答案吗?@Andreytukin谢谢你的解释。实际上,我点击了好几次,但你无法接受我的回答