首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Scala篇】--Scala中的函数

一、前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明。 二、具体函数 1、Scala函数的定义 ?...用def来定义 l可以定义传入的参数,要指定传入参数的类型 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归函数中或者函数的返回值是函数类型的时候。  ...scala中函数有返回值时,可以写return,也可以不写return,会把函数中最后一行当做结果返回。当写return时,必须要写函数的返回值。...** * 包含默认参数值的函数 * 注意: * 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值 * 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数...偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。

1.5K10

Scala中的偏函数

艺术地说,Scala中的Partial Function就是一个“残缺”的函数,就像一个严重偏科的学生,只对某些科目感兴趣,而对没有兴趣的内容弃若蔽履。...在Scala中,所有偏函数的类型皆被定义为PartialFunction[-A, +B]类型,PartialFunction[-A, +B]又派生自Function1。...在PartialFunction中,andThen方法返回的是一个名为AndThen的偏函数: trait PartialFunction[-A, +B] extends (A => B) { override...例如编写一个函数,要求将字符串中的数字替换为对应的英文单词,则可以实现为: val p1:PartialFunction[String, String] = { case s if s.contains...is even" case x if x % 2 == 1 => x + " is odd" } 在Twitter的Effetive Scala中,给出了一个使用map的编码风格建议: //avoid

2.6K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Scala中的方法与函数

    02 函数的常用用法 如果说Scala中的方法更像是其他语言中函数,那么Scala中的函数则更像是为实现函数式编程而特有的设计。...在多数介绍Scala中函数的技术文章中,一般会提到这么一句: 函数是Scala中的一等公民。...,但不可缺省 函数体与方法中的用法类似 实际上,在完成方法介绍之后,函数的用法其实会更简单,但需把握以下区别: 函数可以没有函数名,此时即为匿名函数; 函数无需指定返回值类型,不是可以缺省,而是不支持;...scala> add(1, 2) val res17: Int = 3 函数的用法有许多高级特性,这些在一定程度上丰富了Scala的语法特性,但也很容易对初学者造成很大困扰,下面仅就其中的几个简单展开介绍...方法可以指定返回值类型,也可以缺省;而函数则不支持指定返回值类型 函数与其他对象一致(所谓的一等公民),可以赋值给一个变量,也可作为一个方法的参数或返回值,此时即为高阶函数 方法可以简单的通过"方法名

    1K10

    Javascript中的函数声明和函数表达式

    ; }(); 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符『~』乍一看让人摸不到头脑...在阐述为什么之前,让我们先来明确Javascript中的两个概念:函数声明和函数表达式: 先来看看什么样的是函数声明: function() { alert("hello, world...."); }; function foo() { alert("hello, world."); }; 再来看看什么样的是函数表达式: var foo =...,Javascript不允许在函数声明的后面直接使用小括号,而函数表达式则没有这个限制,通过在函数声明前面加上一个『~』操作符,就可以让语法解析器把后面看成是函数表达式,同样的,在函数声明前面加上『!...,+,-』等操作符也是可行的。 那我们为什么不使用下面这种函数表达式的方式呢?

    56720

    正则表达式中的compile函数

    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。...'one12twothree34four') # 查找头部,没有匹配 print(m) m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配...,没有匹配 print(m) m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配 print(m) # 返回一个Match...,当要获得整个匹配的子串时,可直接使用 group() 或 group(0); start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0...; end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0; span([group]) 方法返回 (start(group), end

    95320

    php中的匿名函数简单使用

    近视的我,看到了function 就以为js… 好了,你看看最开始,是不是一个test1变量右边一个赋值符号,然后赋值符号(=号)的右边是一个函数?...这个函数接收一个参数value,那么这个就是匿名函数,我们使用的时候直接用test1就OK了。...我们函数里面的内容是输出我们参数,我们使用test1传入参数‘HelloWorld’我们运行以下,发现输出了HelloWrold 如果我们要使用这个匿名函数之外的变量,如以下代码,我们要使用use语言结构...> 我们的n变量是在function的外部,如果我们要在function的内部使用这个变量的话我们需要使用use结构,就是在function后面传参括号的后面使用一个use然后一个圆括号里面加上我们要使用的变量...$n,那么这时我们在函数里面输出这个变量,将不会报错。

    82720

    JS中函数声明与函数表达式的不同

    Js中的函数声明是指下面的形式: function functionName(){ }         这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName...= function(){ }         可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢?       ...事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的。...对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,...当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

    1.4K20

    JS中函数声明与函数表达式的异同

    这里就涉及到了函数的传递,函数的传递是传引用,就是说函数存在内存中的某个位置,nameAlert和anotherNameAlert是都是函数的一个引用,把函数名nameAlert赋值给anotherNameAlert...不同点 注:函数声明和函数表达式的不同点包括但不限于以下几点 相对函数声明和函数表达式之间的相同点,它们的不同点更应该值得我们关注。下面我结合自己的理解聊聊。...函数声明必须有标识符,也就是常说的函数名;函数表达式可以省略函数名。 关于它们的定义的不同小伙伴们应该都知道,我们简单重复一遍。...-- 函数表达式 --> var sayTruth=function(){ alert('myvin is handsome.'); } ECMAScript规范中表示,函数声明语句可以出现在全局代码中...对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,

    1.2K50

    scala(七) 函数式编程补充

    匿名函数 说明: 没有名字的函数就是匿名函数,可以直接通过函数字面量(λ表达式)来设置匿名函数,函数字面量定义格式如下。...参考 菜鸟教程 深入理解 Scala 中的闭包(Closures) ---- 递归 所谓递归,就是一个函数内,被自身函数所调用,形成循环调用的现象称为递归调用; 案例:经典的斐波拉契 def...在scala中 编写递归,必须指定返回值类型 def fibonacci(n:Int):Int={} // :Int 必须指定 ---- 控制抽象 控制抽象不能单独定义,只能作为方法的参数类型存在,控制抽象代表的就是一个块表达式...while (布尔表达式){ 循环条件 } while (布尔表达式) ://可以理解为需要一个布尔类型的参数或表达式。 {循环条件}:就是具体的实现。...但是懒汉式在多线环境下就有缺陷,就不得不要其他的方式去修复这些缺陷,如双重检查或其他的方式弥补它的缺陷(跑题了)。 在scala中可以通过关键字 lazy 实现懒加载。

    28930

    简单实现posix中规定的memcmp函数

    简介 memcmp函数的功能非常简单,传入两个指针s1和s2,以及要比较的字节大小n,比较这两块内存的值的差异(逐字节比较,把每个字节都翻译为unsigned char)。...当比较第i位时,如果相等,则返回0, 否则返回不相等的字节的差值(s1[i]-s2[i]). 实现 这个问题,本来是可以无脑的写c代码来逐字节比较的。...repz指令是一个循环指令,每次循环会不断的递减rcx寄存器内的值,当rcx为0或处理器的zero flag不为1时,退出循环。...cmpsb指令则是对两个字节作比较的指令,在计算结束后,会设置相应的状态标志位。cmpsb指令涉及到的两个操作数分别存在rdi、rsi寄存器中。在操作结束后,如果这两个操作数的值相同,则会将ZF置位。...而输出nz到diff中,因此输出的是0. 如果某一字节不相同,那么diff=1。再在下面计算这两个字节到底相差了多少,然后就出结果了。

    66350

    (数据科学学习手札48)Scala中的函数式编程

    一、简介   Scala作为一门函数式编程与面向对象完美结合的语言,函数式编程部分也有其独到之处,本文就将针对Scala中关于函数式编程的一些常用基本内容进行介绍; 二、在Scala中定义函数 2.1...定义函数   和Python相似,Scala中函数的定义和方法(类中的函数称为方法)都以关键词def开始,后面再跟随函数名、函数参数以及参数类型、返回值类型以及函数执行体部分,这是Scala中最常规的函数的定义方法...,在Scala中我们可以对类中的方法进行条件限制,即先决条件,使用在类中定义方法同等层次下,定义require(表达式内容),来对使用到require中表达式限制的参数进行限制,只有满足条件才会运行对应函数...Y函数之间的冲突,运行结果如下: 2.3 匿名函数   在Scala中也有匿名函数的机制,使得我们只需要书写简单的语句就可以在程序中嵌入需要实现的函数功能,下面是一个简单的例子: object main...2.4 高阶函数   高阶函数是Scala的函数式编程中十分有趣的一部分,它的基本特点是将其他函数作为当前函数的参数来传入,下面是一个简单的关于高阶函数部分特性的例子: object main{ def

    54440

    JS 中的函数表达式和函数声明你混淆了吗?

    在 JavaScript 中,function关键字可以完成一个简单的工作:创建一个函数。 但是,使用关键字定义函数的方式可以创建具有不同属性的函数。...1.函数表达式vs函数声明 函数声明和函数表达式是使用 function 关键字创建函数的2种方法。...但是sumB是使用函数表达式创建的(将其包装在括号中),该函数表达式不会在当前作用域内创建函数变量。 如果你想访问使用函数表达式创建的函数,那么将函数对象保存到一个变量中: // Works!...函数声明会创建一个函数变量:一个与函数名称同名的变量(例如,上一个示例中的sumA)。 在当前作用域中(在函数声明之前和之后),甚至在函数作用域本身内,都可以访问该函数变量。...: 如果表达式中的函数没有名称,例如 function(){return 42},那是一个匿名函数表达式 如果函数具有名称,例如 上一个示例中的sumB和回调,那么这是一个命名函数表达式 3.1 函数表达式的注意事项

    75230

    OpenGL中的二维编程——从简单的矩形开始

    属性函数(attribute function)负责控制图元的外观。这类函数定义了颜色、线型、材质属性、光照以及纹理。 观察函数(viewing function)指定摄像机的属性。...输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。...应用程序既可以使用OpenGL、GLU以及GLX库中的函数,也可以直接使用X库或X工具集中的函数。 另外还有一种折衷的方法是借助GLUT库,这样可以使同一个程序能够在不同的平台下重新编译和运行。...该函数的调用应作为main函数最后一条语句出现 提示:GLUT回调函数的形式是固定的。所以,若要在不同的函数之间进行值传播,可能需要借助全局变量。...void glClear(GLbitfield mask) //清空mask指示的所有缓存的位。 //其中mask可由定义在gl.h中的常量通过逻辑或运算构成。

    1.8K40

    《Kotin 极简教程》第8章 函数式编程(FP)(1)第8章 函数式编程(FP)《Kotlin极简教程》正式上架:

    函数作为Kotlin中的一等公民,可以像其他对象一样作为函数的输入与输出。关于对函数式编程的支持,相对于Scala的学院派风格,Kotlin则是纯的的工程派:实用性、简洁性上都要比Scala要好。...Curry 在 1928 开始开发类型系统,他搞的是基于组合子的 polymorphic,Church 则建立了基于函数的简单类型系统。 1929, 哥德尔(Kurt Gödel )完备性定理。...在函数编程中,我们有一个内置的框架来开发更小的、更简单的和更一般化的模块, 然后将它们组合在一起。 函数编程的一些基本特点包括: 函数是"第一等公民"。...Fibonacci数列用数学中的数列的递归表达式定义如下: fibonacci (0) = 0 fibonacci (1) = 1 fibonacci (n) = fibonacci (n - 1)...函数式编程的动机,一开始就是为了处理运算(computation),不考虑系统的读写(I/O)。"语句"属于对系统的读写操作,所以就被排斥在外。 当然,实际应用中,不做I/O是不可能的。

    1.5K20

    Oracle中的正则表达式(及函数)详解

    oracle 正则表达式 匹配 ORACLE中的支持正则表达式的函数主要有下面四个: REGEXP_LIKE :与LIKE的功能相似 REGEXP_INSTR :与INSTR的功能相似 REGEXP_SUBSTR...'( )' 标记一个子表达式的开始和结束位置。 '[]' 标记一个中括号表达式。...position:从源串开始搜索的位置。默认为1。 occurrence:指定源串中的第几次出现。...即将“^”和“$”分别看做源串中任意位置任意行的开始和结束,而不是看作整个源串的开始或结束。如果省略该参数,源串将被看作一行来处理。 如果取值不属于上述中的某个,将会报错。...语法: regexp_like(source_string,pattern[match_parameter]) 该函数可以使用前面介绍的所有搜索功能作为REGEXP_LIKE搜索的一部分,可以是非常复杂的搜索变得简单

    21.2K41

    CC++中substr函数的应用(简单讲解)

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 substr...('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符 substr('Hello World',2,4) //返回结果为 'ello' substr...('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符 测试: select substr('Hello World',-3,3...) value from dual; 附:java中substring(index1,index2)的简单用法 作用:从字符串索引(下标)为index1的字符开始截取长度为index2-index1 的字符串...开始位置之后,剩下的长度 12 //是否大于指定的长度length,如果大于,就可以取长度为length的子串 13 //否则就把从开始位置剩下的字符串全部返回。

    2.6K40
    领券