Scala具名参数Named Argument
admin
2023-08-03 13:20:09
0

什么是具名参数呢?

下面通过简单例子来说明。

需求:有一个42岁的父亲和一个12岁的孩子,求父亲比孩子年长多少岁?可以很简单的写出下面的函数体来实现,如下图:

Scala具名参数Named Argument

特殊情况来了,如果在使用getDvalue函数时,不小心导致了参数p和c写颠倒了,那么结果会是下图所示:

Scala具名参数Named Argument

这样就不是所要的结果了,很小的疏忽导致了结果的不正确性,做一下简单的修改,如下图所示:

Scala具名参数Named Argument

结果又是我们最开始所需的了。

下面写几个错误的示例:

Scala具名参数Named Argument

code:

package demo

object NamedArgument {

  def main(args: Array[String]): Unit = {

    val parent=42

    val child=12

    def getDvalue(p:Int,c:Int):Int={

      p-c

    }

   println("d-value is :"+getDvalue(c=child,p=parent))

   

   def testNA(a:Int,b:String)={}

   testNA(1,"string")//right

   testNA("string",1)//Multiple markers at this line:

                     //type mismatch; found : String("string") required: Int

                     //type mismatch; found : Int(1) required: String

                     //如果不使用具名参数,调用函数时应按照函数定义的参数顺序填写参数

   testNA(b="string",a=1)//right 具名参数

   testNA(b="string",1)//positional after named argument.

                       //如果函数中某个参数没有具名,则按照其所在位置指定参数,可以叫做位置参数

   testNA(b=1,a="string") //Multiple markers at this line:

                          //type mismatch; found : String("string") required: Int

                          //type mismatch; found : Int(1) required: String

                          //type mismatch; found : String("string") required: Int

                          //具名参数指定类型错误,这是比较明显的错误

   testNA(1,a="string") //parameter 'a' is already specified at parameter position 1

                        //参数a已经在位置1(a="string")定义过,与位置参数1(所在位置0)冲突

   testNA(1,b="string") //right

   testNA(a=1,"string") //right

   

  }

}

接下来试试其它的类型

   def testNA2(a:Int*,b:String)={}  //*-parameter must come last  这是基本语法的约束,可变参数必须放在最后,这种写法是错误的

   def testNA2(a:String,b:Int*)={}  //right

   testNA2("string",1,2,3,4)//right

   testNA2(a="string",b=1,2,3,4)//right

   testNA2(1,2,3,4,"string")//type mismatch; found : Int(1) required: String

                            //type mismatch; found : String("string") required: Int

   testNA2(b=1,2,3,4,a="string")

   testNA2(b= List(1,2,3,4),a="string")//type mismatch; found : List[Int] required: Int  

                                       //这样会提示类型错误,这样写其实就不是可变参数了 

                                       //可以写成如下形式testNA3

   def testNA3(a:String,b:List[Int])={}

   testNA3(b= List(1,2,3,4),a="string")

   

   //匿名参数

   def testNA4(a:Int,b:String)=a

   val t1: Int=>Int = testNA4(_:Int,"string")

   val t2: Int => Int = testNA4(b = "string", a = _) //positional after named argument.

   val t3 = testNA4(b = "string", a = _: Int) //positional after named argument.

   val t4: Int=>Int = testNA4(_ , b="string") //right

   val t5: Int=>Int = testNA4(_ , "string") //right   

   val t6: Int=>Int = testNA4(a=_ , b="string") //type mismatch; found : Int required: Int=>Int

   //匿名参数不能使用具名参数


相关内容

热门资讯

山东济宁:让机器人“跑”进千行... 盛夏时节,孔孟之乡迎来一场科技与产业深度交融的大会。7月11日至13日,由山东省机器人行业协会、中国...
外交部亚洲司负责人就日方涉“南... 2026年7月12日,外交部亚洲司负责人就日本外相炒作“南海仲裁案裁决”出台十年发表谈话、日伙同他国...
全球首款可变形个人机器人,上纬... IT之家 7 月 12 日消息,上纬新材今日发布启元 T1 实机视频,号称“全球首款可变形个人机器人...
腾讯重仓一个IPO 图片来源:视觉中国 作者/杨继云 报道/投资界PEdaily 深圳超级IPO来了。 日前,深圳云豹智...
乌方称“俄军9成导弹和无人机有... 近日,乌克兰总统顾问弗拉修克在接受日本共同社的采访时声称,俄军在进攻乌克兰时使用的巡航和弹道导弹及无...
美国驻阿曼使馆发布“就地避险”... 当地时间7月12日,美国驻阿曼大使馆向阿曼境内部分地区发布“就地避险”提醒。美国驻阿曼使馆表示,鉴于...
风雨里的守望——广西防汛抗洪一... ↑ 7月11日,在通往广西南宁横州市镇龙乡的道路上,救援人员徒步向受困地区进发(无人机照片)。近期,...
特大暴雨!“巴威”即将进入安徽... 今年第9号台风“巴威”登陆后深入内陆,将携大量水汽影响安徽,今明两天(7月12日至13日)为台风雨核...
油烟机自动翻盖打不开了 油烟机自动翻盖打不开了的原因有三个。第一,可能是控制面板故障或者附着的油污太多了。第二,油烟机控制系...
万家乐油烟机按键失灵是什么原因 万家乐油烟机按键失灵是什么原因可能是因为受潮影响,机器内部进水导致触摸按键失灵,首先检查电源板各电压...