首页 > 其他分享 >无涯教程-Scala - Currying Functions函数

无涯教程-Scala - Currying Functions函数

时间:2024-01-27 10:32:19浏览次数:28  
标签:Functions String Scala s2 s1 无涯 strcat str2 函数

Currying将一个包含多个参数的函数转换为一个函数链,每个函数都包含一个参数。咖喱函数定义了多个参数列表,如下所示-

语法

def strcat(s1: String)(s2: String) = s1 + s2

另外,您也可以使用以下语法来定义咖喱函数-

语法

def strcat(s1: String) = (s2: String) => s1 + s2

以下是调用curried函数的语法-

语法

strcat("foo")("bar")

您可以根据需要在咖喱函数中定义两个以上的参数。尝试下面的示例程序以显示currying概念。

object Demo {
   def main(args: Array[String]) {
      val str1:String = "Hello, "
      val str2:String = "Scala!"
      
      println( "str1 + str2 = " +  strcat(str1)(str2) )
   }

   def strcat(s1: String)(s2: String) = {
      s1 + s2
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

str1 + str2 = Hello, Scala!

参考链接

https://www.learnfk.com/scala/currying-functions.html

标签:Functions,String,Scala,s2,s1,无涯,strcat,str2,函数
From: https://blog.51cto.com/u_14033984/9442256

相关文章

  • 无涯教程-Scala - Functions with Named Arguments函数
    在普通函数调用中,调用中的参数按照被调用函数的参数顺序一一匹配。命名参数允许您以不同顺序将参数传递给函数。语法很简单,每个参数前面都有一个参数名称和一个等号。尝试下面的程序,这是一个显示带有命名参数的函数的简单示例。例objectDemo{defmain(args:Array[S......
  • 无涯教程-Scala - Functions Call-by-Name函数
    通常,函数的参数是按值参数;也就是说,参数的值是在传递给函数之前确定的。但是,如果我们需要编写一个函数,该函数接受在函数中被调用之前不希望对其求值的表达式作为参数,该怎么办?在这种情况下,Scala提供了按姓名呼叫参数。按名称的呼叫机制将代码块传递给该呼叫,并且每次该呼叫......
  • 无涯教程-Scala - do-while 循环函数
    与while循环在循环顶部测试循环条件不同,do-while循环在循环底部检查其条件,do-while循环与while循环相似,除了保证do-while循环至少执行一次do-while-语法以下是do-while循环的语法。do{statement(s);}while(condition);do-while-流程图尝试使用以下示例......
  • 无涯教程-Scala - while 循环函数
    在给定条件为真时重复一个语句或一组语句,它在执行循环体之前判断条件,只要给定条件为真,while循环语句就会重复执行目标语句。while-语法以下是while循环的语法。while(condition){statement(s);}while-流程图while-示例objectDemo{defmain(args:Array[......
  • 无涯教程-Scala - 文件I/O
    Scala开放使用任何Java对象,java.io.File是可在Scala编程中用于读取和写入文件的对象之一。importjava.io._objectDemo{defmain(args:Array[String]){valwriter=newPrintWriter(newFile("test.txt"))writer.write("HelloScala")writer......
  • 无涯教程-Scala - 提取器
    Scala中的提取器Extractors是一个对象,该对象具有称为unapply的方法,该方法的目的是匹配值并将其拆开。让我们以对象定义apply和unapply方法为示例,apply方法的含义与以往相同:它将Test变成一个对象,该对象可以以与应用方法相同的方式应用于括号中的参数。因此,您可以编写Te......
  • 无涯教程-Scala - 异常处理
    Scala的异常与Java之类的许多其他语言中的异常一样工作,方法可以通过引发异常来终止,但是,Scala实际上没有检查过的异常。当您要处理异常时,可以像在Java中一样使用try{...}catch{...}块,只是catch块使用匹配来识别和处理异常。抛出异常引发异常看起来与Java中相同,创建一个异常......
  • 无涯教程-Scala - 正则表达式
    本章介绍Scala如何通过scala.util.matching包中提供的Regex类支持正则表达式。尝试下面的示例程序,我们将尝试从语句中找出单词Scala。importscala.util.matching.RegexobjectDemo{defmain(args:Array[String]){valpattern="Scala".rvalstr="Sc......
  • 无涯教程-Scala - 模式匹配
    在函数值和闭包之后,模式匹配是Scala第二广泛使用的函数,Scala在处理消息时为模式匹配提供了强大的支持。Pattern-示例objectDemo{defmain(args:Array[String]){println(matchTest(3))}defmatchTest(x:Int):String=xmatch{case1=>......
  • 无涯教程-Scala - 特性(Traits)
    Traits封装了方法和字段定义,然后可以通过混合到类中来重用它们。与类继承不同,一个类可以混合任意数量的traits。traits定义看起来类似于类定义,只是它使用关键字trait。以下是trait的基本示例语法。Traits-语法traitEqual{defisEqual(x:Any):BooleandefisNot......