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

Scala基础概念

: 严格求值:call by value 非严格求值:call by name 惰性求值 定义表达式时不会立即求值,只第一次调用时才求值 递归函数 函数式编程中没有循环语句,全部循环用递归实现...("dog") }catch{ case _ => 0 //下划线是通配符,统配所有异常 }finally{ print("总是会打印"); } scalamacth 类似switch...call by value 对函数实参求值,仅求一次,求得值直接替换函数中形式参数 call by value 不会对函数实参进行表达式求值,直接把表达式传入函数体内,替换表达式形参,然后函数内每次使用到此形参时会被求值...loop: ()Int scala> bar(1,loop) //loop函数位于参数定义方式是y: => Int,即call by name,不进行求值,会带到函数体内并且使用时 才求值,此处...,函数跟普通变量一样使用,且具有函数相关类型 函数类型 scala中,函数类型格式为 A => B,表示一个:接受参数类型为A、并返回类型B函数 eg: Int => String

71830

3小时Scala入门

4,变量 Scala支持两种类型变量,即常量val和变量var。 常量程序中不可以被重新指向,变量可以被重新指向新对象。 声明变量时可以指定类型,也可以由解释器根据初始值自动推断。 ?...(7)->用来指定映射Map中键值关系。 (8)<-用来指定for表达式迭代器。 (9)下划线_Scala中被用作占位符表示匿名函数参数或作为引入package通配符。...Scala有3中定义风格,java风格,简写风格,和case风格。 简写风格可以声明参数前加上val即表示为属性,省去属性绑定。...简洁范例:强大自动类型推断,隐含类型转换,匿名函数,case,字符串插值器。...4,函数式编程 函数特点是操作无副作用,唯一作用生成函数值。 把一个函数作用到一些参数上,不会对输入参数造成改变。 为了逼近这个目标,scala设计默认数据结构绝大部分是不可变

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

3小时Scala入门

4,变量 Scala支持两种类型变量,即常量val和变量var。 常量程序中不可以被重新指向,变量可以被重新指向新对象。 声明变量时可以指定类型,也可以由解释器根据初始值自动推断。 ?...(7)->用来指定映射Map中键值关系。 (8)<-用来指定for表达式迭代器。 (9)下划线_Scala中被用作占位符表示匿名函数参数或作为引入package通配符。...Scala有3中定义风格,java风格,简写风格,和case风格。 简写风格可以声明参数前加上val即表示为属性,省去属性绑定。...简洁范例:强大自动类型推断,隐含类型转换,匿名函数,case,字符串插值器。...4,函数式编程 函数特点是操作无副作用,唯一作用生成函数值。 把一个函数作用到一些参数上,不会对输入参数造成改变。 为了逼近这个目标,scala设计默认数据结构绝大部分是不可变

3.5K20

3小时Scala入门

4,变量 Scala支持两种类型变量,即常量val和变量var。 常量程序中不可以被重新指向,变量可以被重新指向新对象。 声明变量时可以指定类型,也可以由解释器根据初始值自动推断。 ?...(7)->用来指定映射Map中键值关系。 (8)<-用来指定for表达式迭代器。 (9)下划线_Scala中被用作占位符表示匿名函数参数或作为引入package通配符。...Scala有3中定义风格,java风格,简写风格,和case风格。 简写风格可以声明参数前加上val即表示为属性,省去属性绑定。...简洁范例:强大自动类型推断,隐含类型转换,匿名函数,case,字符串插值器。...4,函数式编程 函数特点是操作无副作用,唯一作用生成函数值。 把一个函数作用到一些参数上,不会对输入参数造成改变。 为了逼近这个目标,scala设计默认数据结构绝大部分是不可变

1.6K30

23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

_ => "Other Type"   }  }} case class模式 构造器模式指的是,直接在case语句后面接构造器,匹配内容放置构造器参数中。...x if(x == 5) => "守卫" //通配符模式      case _ => "通配符"    }  }} Option匹配 Scala中Option类型样例用来表示可能存在或也可能不存在值...当调用该函数或方法时,scala会尝试变量作用域中找到一个与指定类型相匹配使用implicit修饰对象,即隐式值,注入到函数参数中函数体使用。...那么,自然throw表达式也不例外,throw表达式返回值为Nothing。由于Nothing类型是所有类型类型,因此throw表达式可以出现在任意位置,而不会影响到类型推断。...当接收参数为Object类型时,scala默认不会转换成java数值类型,这样当判断对象具体数值类型时,会出现不认识scala对象类型异常。

1K20

Scala

= mulBy(0.5) 5 println(tripe(14) + " " + half(14))   这就是一个闭包 3、scala柯里   定义:柯⾥指的是将原来接受两个参数函数变成新接受...也就是说,伴生对象可以访问伴生私有成员,伴生也可以访问伴生对象私有成员。   ...:不需要使用分号作为结束符   java: 每个语句结束后需要分号作为结束符   4、循环   scala:循环语句可以⽤于守卫   java: 不可以这么写   5、通配符:   scala:_   ...器名称需要与名称一样   7、内部类   scalascala实例内部类是不同,可以使⽤类型投影,例如 Network#Person表示NetworkPerson   8、接⼝   java...object是单例对象,开发⼈人员⽆需用new关键字实例。如果对象名称和名相同,这个对象就是伴生对象(深⼊了解请参考问题Q7) 13、 case class (样本类)是什么?

16830

Scala专题系列 (八) : 模式匹配

scala中所有,表示任意类型), 注意看函数体 x = match{ case 1 => "one" } 这个就是scala中模式匹配语法结构, 首先变量.match(选择器) 后面跟着一个花括号...=="two") => 2 case _ => } } 变量匹配,匹case语句后面接scala变量,如case x if(x == "1") => x等,使用时一般会加守卫条件...- 构造器模式 构造器模式匹配直接在case语句后面接构造器,匹配内容放置构造器参数中。...与通配符(_)不同是,Scala把变量绑定在匹配对象上。...元组模式:匹配元祖 类型模式:匹配变量类型 Option 类型 Option类型Scala程序中经常使用,可以将其与Java中可用null值进行比较,表示null值。

81720

大数据--scala学习第一章:基础第二章:控制结构和函数第三章:数组第四章:字典和元组第五章:第六章:对象第七章:包和引入第八章:继承第九章文件和正则表达式第十章特质:接口第十一章操作符第十二章函

可以通过追加:_*来解决不能接受问题:sum(2 to 10:_*) 14、过程:没有函数名后面等号函数称为过程,返回是Unit. 15、懒加载:lazy val words=初始表达式 ,该变量只有使用时才会调用初始...5、参数推断,当你将一个匿名函数传递给函数或方法时,Scala会尽可能推断类型信息如:valueAtOneQuater((x)=>3*x)函数会推断出x类型为Double。...模式匹配时可以将类型为Amount对象和样例进行匹配,然后参数会直接绑定然后直接用样例变量如下: amout math{ case Dollar(v)=>"$"+v case...存在类型:就是类似于java中南通配符?。Scala类型如下图: 6、依赖注入,抽象类型,家族多态,高等类型这里不再累述。 7、type和class区别:每个对象都有自己不同type。...2、当对象访问一个不存在成员时。3、当对象调用某个方法,传入参数类型不对时。

4.4K20

Scala教程之:静态类型

类型 和java一样,Scala也有泛型概念,scala里面泛型是使用方括号 [] 来接受类型参数。通常使用字母A来作为参数标志符,当然你也可以使用其他任意参数名称。...类型系统中使用型变允许我们复杂类型之间建立直观连接,而缺乏型变则会限制抽象重用性。...内部类 内部类就是class里面的class,java里面,内部类被看成是外部类成员。但是scala中内部类是和外部类对象进行绑定。...(x: Int) = java.lang.Integer.valueOf(x) Scala 多态方法 Scala中多态是通过类型和值参数来实现。...当调用 多态方法 或实例 泛型 时,也不必明确指定类型参数Scala 编译器将从上下文和实际方法类型/构造函数参数类型推断出缺失类型参数

1.3K20

Scala语言入门:初学者基础语法指南

例如,Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。Scala中,成员变量/属性必须显示初始,而在Java中可以不初始。...作为通配符:下划线可以用作通配符,表示匹配任意值。例如,模式匹配中,可以使用下划线来表示匹配任意值。...例如,case str: String 表示当 value 类型为 String 时执行该分支,并将其绑定到变量 str。类似地,其他 case 语句也使用类型模式匹配来匹配不同类型。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型 Scala 中,可以使用 + 符号来表示协变。...由于 Cage 是协变,所以可以将 Cage[Dog] 和 Cage[Cat] 赋值给 Cage[Animal] 类型参数,而不会产生类型错误。

22220

Scala语言入门:初学者基础语法指南

例如,Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。Scala中,成员变量/属性必须显示初始,而在Java中可以不初始。...作为通配符:下划线可以用作通配符,表示匹配任意值。例如,模式匹配中,可以使用下划线来表示匹配任意值。...例如,case str: String 表示当 value 类型为 String 时执行该分支,并将其绑定到变量 str。类似地,其他 case 语句也使用类型模式匹配来匹配不同类型。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型 Scala 中,可以使用 + 符号来表示协变。...由于 Cage 是协变,所以可以将 Cage[Dog] 和 Cage[Cat] 赋值给 Cage[Animal] 类型参数,而不会产生类型错误。

24320

Scala语言入门:初学者基础语法指南

例如,Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。Scala中,成员变量/属性必须显示初始,而在Java中可以不初始。...作为通配符:下划线可以用作通配符,表示匹配任意值。例如,模式匹配中,可以使用下划线来表示匹配任意值。...例如,case str: String 表示当 value 类型为 String 时执行该分支,并将其绑定到变量 str。类似地,其他 case 语句也使用类型模式匹配来匹配不同类型。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型 Scala 中,可以使用 + 符号来表示协变。...由于 Cage 是协变,所以可以将 Cage[Dog] 和 Cage[Cat] 赋值给 Cage[Animal] 类型参数,而不会产生类型错误。

22410

Scala语言入门:初学者基础语法指南

例如,Scala中,一切皆为对象,而在Java中,基本类型、null、静态方法等不是对象。Scala中,成员变量/属性必须显示初始,而在Java中可以不初始。...作为通配符:下划线可以用作通配符,表示匹配任意值。例如,模式匹配中,可以使用下划线来表示匹配任意值。...例如,case str: String 表示当 value 类型为 String 时执行该分支,并将其绑定到变量 str。类似地,其他 case 语句也使用类型模式匹配来匹配不同类型。...如果一个泛型类型参数是协变,那么子类型关系将保持不变,即父类型可以被替换为子类型 Scala 中,可以使用 + 符号来表示协变。...由于 Cage 是协变,所以可以将 Cage[Dog] 和 Cage[Cat] 赋值给 Cage[Animal] 类型参数,而不会产生类型错误。

24220

多面编程语言Scala

是的,Scala里,你可以放心大胆地使用vals="ABC",而Scala里强大类型推断和模式匹配,绝对会让你爱不释手。...Java中,可以既有静态成员,又有实例成员。...用时,我们分别传入求圆周长和圆面积匿名函数,用于实现calc函数逻辑。...这在函数式编程中称为柯里(Curry),柯里可以把函数定义中原有的一个参数列表转变为接收多个参数列表。函数式编程中,一个参数列表里含多个参数函数都是柯里函数,可以柯里。...此外,Scala模式匹配还有更多用法,如case匹配、option类型匹配,同时还能带入变量,匹配各种集合类型。综合运用模式匹配,能够极大提升开发效率。

2.5K40

大数据分析工程师面试集锦2-Scala

表达式相关 从表达式开始涉及知识点会越来越复杂,会涉及到匹配表达式、循环、正则,另外也要关注if……else、值绑定通配符如何使用。 8 说说你对匹配表达式/模式匹配理解?什么是模式守卫?...方法是定义函数,这个进行实例后会有一个同名方法,一般调用方法做法是使用缀点记法-实例名.方法名(参数……) 12 什么是偏函数?...部分应用函数可以从字面含义进行解释,只使用一个函数部分功能-只使用部分参数,其他参数值固定,可以将原函数直接调用,然后对于需要固定参数,直接在参数中输入相应值,需要变化参数使用“_”,需要注意通配符要指定类型...Option类型表示一个值存在与否,一般程序中需要返回一个空对象时候,使用Option类型,如果返回null,程序会引起异常,而Option就不会。...有区别的,不加关键字的话,这个参数只能用于实例,一旦实例后这些参数就不可以使用了,如果加关键字的话这些参数就成为一个字段。 30 case class(样本类)是什么?

2K20

Scala教程之:函数式Scala

在上面的例子中,我们并没有显示使用x:Int形式,这是因为编译器可以通过类型推断推断出x类型,对其更简化形式是: val salaries = Seq(20000, 70000, 40000)...val newSalaries = salaries.map(_ * 2) Scala 既然Scala编译器已经知道了参数类型(一个单独Int),你可以只给出函数右半部分,不过需要使用_代替参数名...scala类型推断,我们可以让代码更加简洁: numbers.foldLeft(0)(_ + _) Scala 样例 case class主要用于不可变数据。...伴生对象 伴生对象是指与某个名相同单例对象,和它伴生对象可以互相访问其私有成员。...注意:和它伴生对象必须定义同一个源文件里。 正则表达式模式 Scala中,可以使用.r方法将任意字符串变成一个正则表达式。

77010

Swift学习总结

switch支持值绑定case语句中声明变量或常量,其值绑定为状态码值。switch绑定值可以配合where语句使用,能额外检查一些条件,这个特性可以创建动态筛选条件。...7、if-case 语法 为只有一个分支switch语句提供优雅替代品。 8、区间既可在switch语句中匹配使用,也可以for-in循环中使用。...9、通配符_既可以switch语句使用,也可以for-in语句中替代迭代器,这样就可以忽略迭代器。...元组也可以作为函数参数 6、闭包就是objc中Block 闭包语法: {(参数)->返回类型 in //代码 } 闭包可以利用swift类型推断系统去除参数和返回值类型信息来简化闭包。...与结构体不同,没有默认成员初始方法。 方法实现中,属性如果遇到同名参数才需要指定self,不然则不需要。 初始方法中允许给常量赋值,其它方法则不允许。

3K20

Scala最基础入门教程

语言特点如下: (1)Scala和Java一样属于JVM语言,使用时都需要先编译为class字节码文件,并且Scala能够直接调用Java库。...那么调用时,小括号,可加可不加(声明无括号调用时也没有括号) 如果方法没有参数列表,那么小括号可以省略,调用时小括号必须省略 // 1、return可以省略,Scala使用方法体最后一行代码作为返回值...- _ // 2、参数必须只使用一次,使用顺序必要和定义顺序一直 val f9: (Int, Int) => Int = -_ + _ 6、函数柯里&闭包 **函数柯里:**将一个接收多个参数函数转化成一个接受一个参数函数过程...var修饰参数:作为成员属性使用,可以修改。 val修饰参数:作为只读属性使用,不能修改。...class与object同一个文件中。 如果满足上两个条件,那么就称这个object为class伴生对象,称class为object伴生。 伴生与伴生对象可以互相访问对方私有成员

52970

Scala学习笔记

//若定义时候不加(), 调用时也不能加()     注意:方法返回值类型可以不写,编译器可以自动推断出来,但是对于递归方法,必须指定返回类型     (*)如何定义一个函数         ...res17: Int = 6             #将sum写成柯里sum,前面方法使用一个参数列表,“柯里”把方法或者函数定义成多个参数列表(且第一个参数只有一个参数,剩余参数可以放在一个参数列表中...高级内容:泛型     (*)泛型         泛型声明时名后面括号中即为类型参数),顾名思义,其实就是声明中,定义一些泛型类型,然后内部,比如field、method,就可以使用这些泛型类型...        使用泛型,通常需要对中某些成员,比如某些field或者method参数或变量,进行统一类型限制,这样可以保证程序更好健壮性和稳定性         如果不适用泛型进行统一类型限制...:(泛型变量值可以是本身或者其父类型或者特征定义中,类型参数之前加上一个-符号,就可以定义逆变泛型和特征了                 参考ContravanceDemo代码

2.6K40
领券