Scala实践6

 

1  if表达式

  •      Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型。
scala> val a3=10
a3: Int = 10scala> val a4=
| if(a3>20){
| "a3大于a4"
| }else{
| "a4大于a3"
| }
a4: String = a4大于a3scala> val a5=
| if(a3>20)"a3大于20"
a5: Any = ()scala> println(a5)
()

  

2  while表达式

  • while循环
scala> def gcdLoop(x:Long,y:Long):Long={|  var a=x|  var b=y|    while(a!=0){|    val temp=a|    a=b%a|    b=temp|    }|  b| }
gcdLoop: (x: Long, y: Long)Longscala> gcdLoop(8,9)
res0: Long = 1scala> gcdLoop(8,4)
res1: Long = 4
  •   while循环的中断
import scala.util.control.Breaks
object whilexample {def main(args:Array[String]): Unit ={var n=1;val loop=new Breaksloop.breakable{while(n<=20){n+=1;if(n==19){loop.break()}}}println(n)}
}

  结果如下:

 

3  for表达式

  •  for中to示例:
scala> for(i <- 1 to 3; j <- 1 to 3){|   print(i * j + " ")| }
1 2 3 2 4 6 3 6 9
  • for中until示例:
scala> for(i <- 1 until 3; j <- 1 until 3) {|   print(i * j + " ")| }
1 2 2 4
  • for中的条件判断示例
scala> for(i <- 1 to 3 if i != 2) {|  print(i+" ")| }
1 3
scala>
  • for中的引入变量
scala> for(i <- 1 to 3; j = 4 - i) {|  print(j+" ")| }
3 2 1
  • 使用yield关键字,将遍历过程处理结果返回一个值。
scala> val for5 = for(i <- 1 to 10) yield i
for5: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)scala> print(for5)
Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val for5 = for(i <- 1 to 10)| print(for5)
<console>:13: error: recursive value for5 needs typeprint(for5)^
  •  过滤,通过for中的() 添加过滤器(filter),就是if子句。
object hello{def main(args:Array[String]){ val filesHere=(new java.io.File(".")).listFilesfor(file<-filesHere if(file.getName.endsWith(".scala")))println(file)}}D:\>scala hello.scala
.\a.scala
.\h.scala
.\hello.scala
.\s.scala

4  try表达式

  •  抛出异常
scala> def ha(n:Int){| val half=if(n%2==0) print(n/2)| else|    throw new RuntimeException("n num be even")| }
ha: (n: Int)Unitscala> ha(7)
java.lang.RuntimeException: n num be evenat .ha(<console>:14)... 28 elidedscala> ha(8)
4

  

  • 捕获异常

捕获异常的语法选择catch子句的原因是与模式匹配保持一致。

 object ExceptionSyllabus {def divider(x: Int, y: Int): Float= {if(y == 0) throw new Exception("0作为了除数")else x / y}def main(args: Array[String]): Unit = {try {println(divider(10, 3))} catch {case ex: Exception => println("捕获了异常:" + ex)} finally {}}}D:\>scala ExceptionSyllabus.scala
3.0//当数字改为(10,0)后
D:\>scala ExceptionSyllabus.scala
捕获了异常:java.lang.Exception: 0作为了除数

  

5  匹配表达式

  •  Scala中的match表达式类似于其它语言的switch语句,它可用提供多个备选项做选择。
object frist{def main(args:Array[String]){ val firstArg=if(args.length>0)args(0) else ""firstArg match{case "salt"=>println("papper")case "chips"=>println("salsa")case "eggs"=>println("bacon")case _=>println("huh?")}}}D:\>scala frist.scala
huh?D:\>scala frist.scala salt
papper

  

 6  lazy懒值

  • 当val被声明为lazy时,初始化将被推迟,直到我们首次对此取值,适用于初始化开销较大的场景。 通过lazy关键字的使用与否,来观察执行过程
object Lazy {def init(): String = {println("init方法执行")"嘿嘿嘿,我来了~"}def main(args: Array[String]): Unit = {lazy val msg = init()println("lazy方法没有执行")println(msg)}}

  结果:

object Lazy {def init(): String = {println("init方法执行")"嘿嘿嘿,我来了~"}def main(args: Array[String]): Unit = {val msg = init()println("lazy方法没有执行")println(msg)}}

 结果: 

 

7 柯里化

在函数编程中,将接受多个参数的函数转化为接受单个参数的函数。这一过程称为柯里化

scala> def mul(x: Int, y: Int) = x * y
mul: (x: Int, y: Int)Intscala> println(mul(10, 10))
100scala> def mulCurry(x: Int) = (y: Int) => x * y
mulCurry: (x: Int)Int => Intscala> println(mulCurry(10)(9))
90scala> def mulCurry2(x: Int)(y:Int) = x * y
mulCurry2: (x: Int)(y: Int)Intscala> println(mulCurry2(10)(8))
80

  

  • 柯里化的应用:在忽略大小写的情况下,计较是否相等。
scala> val a = Array("Hello", "World")
a: Array[String] = Array(Hello, World)scala> val b = Array("hello", "world")
b: Array[String] = Array(hello, world)scala> println(a.corresponds(b)(_.equalsIgnoreCase(_)))
true

  

 

转载于:https://www.cnblogs.com/0205gt/p/10983211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery ui autocomplete输入中文不自动完成的问题

因为输入法或浏览器的问题&#xff0c;在输入中文后并没有触发自动完成&#xff0c;要再按多一下键盘才触发&#xff0c;查看发现它是用keydown来实现.bind("keydown.autocomplete", function(event) {....})可以对其input事件进行监听来解决问题&#xff0c;在上面的…

【洛谷p1464】 Function

中考第一天&#xff1b; 感觉我超废&#xff1b; 就是看这道题特别顺眼emmm SOLUTION&#xff1a; 思路的话是开三维数组s[i][j][k]&#xff0c;先三重for循环预处理出s[0~20][0~20][0~20]的w(a,b,c)&#xff0c;然后直接搜索就好了。 Code&#xff1a; #include<bits/stdc.…

一个简单的高并发的回应服务器(5万并发)

一个简单的高并发的回应服务器&#xff0c;主要是使用boost的库&#xff01; 自己测试过可以达到5万个并发&#xff01; 程序的下载地址&#xff1a;http://download.csdn.net/detail/guanyijun123/8335907 #include <stdio.h> //#include "AuthenHandle.h" /…

delphi 的一些备忘

override&#xff1a;覆盖&#xff1b; overload&#xff1a;重载&#xff1b; Reintroduce&#xff1a;重定义&#xff0c;它的引入是为了屏蔽父类的一个虚方法,而在子类中生成一个新的方法; 其实你不使用reintroduce也会覆盖屏蔽父类的方法的但是会产生一个警告&#xff01; …

10.高效分布

ListView默认的分页是先从数据源取得所有数据&#xff0c;然后再截取当前页面的部分&#xff0c;在数据量非常大的情况下效率非常低&#xff0c;因此默认的分布基本不能用。应该是只从数据源取得要显示的数据即可。SQL中语句中取得分页数据的方法为&#xff1a;Select * ,ROW_N…

项目测试~

这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340 团队名称 求莫名堂 作业的目标 学会进行项目的测试&#xff0c;并通过测试发…

boost_1_48_0 在VS2008下的安装 Boost.Asio安装

第一步&#xff1a;到官网www.boost.org&#xff0c;下载boost最新版boost_1_48_0.zip第二步&#xff1a;将boost压缩包解压到C盘根目录下(在C盘操作简单&#xff0c;不会出错)&#xff0c;目录为C:\BOOST_1_48_0,里面就是boost的源码和需要编译的文件及文档资料第三步&#xf…

线程----BlockingQueue

import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** 本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西…

D3D9 effect (hlsl)(转)

转:http://blog.csdn.net/leonwei/article/details/8212800 effect其实整合了shader和render state的控制两大部分内容 9.1 effect文件基本框架 part1 &#xff1a;shader state包括全局变量 shader数据结构定义&#xff0c;shader的实现 part2 &#xff1a;texture and sample…

boost_1.47在VS2010下的安装

第一步&#xff1a;到官网www.boost.org&#xff0c;下载boost最新版boost_1_47_0.zip第二步&#xff1a;将boost压缩包解压到C盘根目录下(在C盘操作简单&#xff0c;不会出错)&#xff0c;目录为C:\BOOST_1_47_0,里面就是boost的源码和需要编译的文件及文档资料第三步&#xf…

创建 WPF 不规则窗口

创建 WPF 不规则窗口 本文为khler原作&#xff0c;转载必须确保本文完整并完整保留原作者信息及本文原始链接  E-mail: khler163.com  QQ: 23381103  MSN: pragmachotmail.com   相对于用MFC创建不规则窗口&#xff0c;WPF创建不规则窗体的过程就显得相当享受了&…

公司运作 - 利润率、周转率

公司一般由市场部、研发部、财务部、人力资源部及其他辅助部门组成。分成了几个层面&#xff0c;如下&#xff1a; 宏观层面&#xff1a;业务范围、业务定位、专业化、多元化部门层面&#xff1a;各部门绩效、部门职责主体层面&#xff1a;跨部门事务&#xff0c;如产品研发涉及…

ffmpeg编解码详细过程

1. 注册所有容器格式和CODEC:av_register_all() 2. 打开文件:av_open_input_file() 3. 从文件中提取流信息:av_find_stream_info() 4. 穷举所有的流&#xff0c;查找其中种类为CODEC_TYPE_VIDEO 5. 查找对应的解码器:avcodec_find_decoder() 6. 打开编解码器:avcodec_open() 7.…

使用docker 起容器配置负载均衡(加权)

首先要准备三个nginx的容器&#xff1b; 第二个容器&#xff1a; 第三个容器&#xff1a; 进入第一个容器&#xff08;主容器&#xff09; 要配置的容器&#xff08;docker exec -it 容器id /bin/bash&#xff09; vi/etc/nginx/nginx.conf 修改配置 在http{ }中加入 vi/etc/…

茴香豆的n种写法之②——Sql据多个条件 查询每个条件的前N条记录

----------------------------------- Author: liangCK 小梁-- Title : 查每个分组前N条记录-- Date : 2008-11-13 17:19:23-----------------------------------> 生成测试数据: #TIF OBJECT_ID(tempdb.dbo.#T) IS NOT NULL DROP TABLE #TCREATE TABLE #T (ID VARCHAR(3),G…

PostgreSQL建表动作分析

首先&#xff0c;建立表&#xff1a; pgsql# create table tab10(id integer); CREATE TABLE pgsql# select 147525::regclass;regclass ----------tab10 (1 row)pgsql# 查看此时的文件信息&#xff1a; [pgsqllocalhost 16384]$ pwd /home/pgsql/DemoDir/base/16384[pgsqllo…

http 断点续传,Windows下HTTP方式单线程下载

http 断点续传www.diybl.com 时间 &#xff1a; 2011-05-20 作者&#xff1a;匿名 编辑&#xff1a;hawk 点击&#xff1a; 1128 [ 评论 ]-- 原理&#xff1a; 1. 打开本地文件fopen&#xff0c;移动文件指针到文件尾fseek 2. 获得文件大小ftell, 格式化HTTP请求头 &…

给创业者的30条建议

http://www.cocoachina.com/programmer/20150206/11119.html 去年年底的时候&#xff0c;我&#xff08;Firstround Review 主编&#xff09;在 Facebook 公司的咖啡厅里和 Caryn Marooney 交流着创业公司应该注意些什么事情。Caryn Marooney 现在是 Facebook 公司科技交流部门…

php swoole websocket vue 实现聊天室案例

代码地址: https://github.com/9499574/demo_chat_room 转载于:https://www.cnblogs.com/phper8/p/11017892.html

数据结构 练习21-trie的原理分析和应用

前言 今天具体分析一下trie树&#xff0c;包括&#xff1a;原理分析&#xff0c;应用场合&#xff0c;复杂度分析&#xff0c;与hash的比较&#xff0c;源码展现。大部分内容来自互联网&#xff0c;文中会注明出处。 原理分析 主要是hash树的变种&#xff0c;先看下图&#xff…