Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala字符串*类型(在函数参数中)_Scala_Syntax - Fatal编程技术网

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
将绑定到a
Seq[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谢谢你的解释。实际上,我点击了好几次,但你无法接受我的回答