快学Scala-04-函数和数组

摘要:
1.函数defdd([参数:类型])[返回类型][=]{方法体}的定义形式注意:不需要返回方法体。默认情况下,最后一句返回方法体的花括号。简而言之,不能有参数,不能有返回值,不能有=符号,不能有花括号,不能有returndefdd(a:Int,b:Int):Int={returna+b}defdd(a:Int,b:Int):Int={a+b}defdd+
1.函数的定义形式
def add([参数:类型])[返回类型][=]{方法体}
注意:方法体的return 不是必须的,最后一句默认返回
方法体的花括号可以没有
总之 可以没有参数,没有返回值,没有=号,没有花括号,没有return
 
def add(a:Int,b:Int):Int={
    return a+b
}

def add(a:Int,b:Int):Int={
     a+b
}

def add(a:Int,b:Int):Int=a+b
    
def add(info:String) {printf(info)}    
def add(info:String)= println(info)
 
2.函数参数的默认值
def echo(per:String,info:String,post:String):String={
    per+info+post
}
echo("[[","hello","]]")

若果[[和]]的出现概率特别高,可以设置为默认
def echo(per:String="[[",info:String,post:String="]]"):String={
    per+info+post
}
    必须指明赋值给哪一个参数,默认是第一个参数
call: echo(info="hello")   
 
3.不定长参数
def add(m:Int*):Int={
    var sum=0
    for(x <-m){
        sum+=x
    }
    sum
}
add(1,2,3,4,5)
add(1 to 5 :_*)

使用 add(1 to 6) 是不行的,因为参数类型不对
可以add(1 to 5 :_*) 来迭代一个range
 
4.数组的定义
val arr= new Array[Int](5)
val arr2 = Array(1,2,3,4,5)
val arr3=Array(1 to 10:_*)
Result:
arr: Array[Int] = Array(0, 0, 0, 0, 0)
arr2: Array[Int] = Array(1, 2, 3, 4, 5)
 
在Scala当作,数组的长度是不刻改变的,类似于Java
5.数组的切片(切分)
val arr3=Array(1 to 10:_*)

arr3.splitAt(3)  //只能分成两段
res0: (Array[Int], Array[Int]) = ([I@30bd41ae,[I@d5df719)
                                               
arr3.slice(2,5)  //前包后不包 相当于subString(begin,end)
res1: Array[Int] = Array(3, 4, 5)
 
6.数组的迭代
val arr3=Array(1 to 10:_*)
arr3.foreach(println) 

for(x <-arr3){
    println(x)
}
 
高阶函数,也就是函数调用函数,把函数名println 传递给高阶函数foreach()
7.变长数组
mutable :可变的
import scala.collection.mutable.Arraybuffer
var arr= ArrayBuffer(1 to 10:_*)
arr+=5
arr.insert(1,5)  //(index ,value)
arr.foreach(println)
//添加一个集合
arr++=Array(1,2,3)

arr-=3    //第一个value的3 被移除
arr--=Array(1,2,3)
arr.remove(5) //remove(index)  根据position返回被移除的value
arr.remove(offerset,deleteNumber)  //删除多个  (偏移量,删除多少个)
arr(1)     //通过下标找value
arr.indexOf(4)  //通过value找下标
 
 
《快学Scala》高清中文PDF+源代码
提取码:an5d 
 
 
 
 

免责声明:文章转载自《快学Scala-04-函数和数组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇搞懂iobuffer就得先学习bytebuffershiro源码解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

netty 实现socket服务端编写

1 importjava.net.InetSocketAddress; 2 3 importio.netty.bootstrap.ServerBootstrap; 4 importio.netty.channel.ChannelFuture; 5 importio.netty.channel.ChannelInitializer; 6 impo...

通过浏览器批量下载文件到zip压缩包

/** * 批量下载证件照、文件 * * @return */ @GetMapping("/downLoadImgs") @Transactional public void downLoadImgs(HttpServletRequest request,@Reques...

jsTree通过AJAX从后台获取数据

页面代码: <div id="MenuTree"></div> javascript代码: $(document).ready(function($) { InitMenuTree(); }); functionInitMenuTree() { $('#MenuTree').data('jstree', false);...

C# 反射(Reflection)

反射(Reflection)可以在运行时获 得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。 反射用到的命名空间:    System.Reflection    System.Type    System.Reflection.Assembly using System; using System...

Oracle 自定义函数实现列转行效果

在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用。但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险;函数返回值的格式比较单一(只能用逗号分割);返回值的长度也限制。 在《.Net程序员学用Oracle系列(20):层次查询(CONNECT BY)》一文中,详细讲解了...

SpringBoot中前后端数据交互

不只适用于SpringBoot 工具:postman、IDEA 目的:测试前后端数据的交互情况、交互过程出现的明确各种问题及其解决方法 基础知识: Content-Type发送信息至服务器时内容编码类型,默认是( application/x-www-form-urlencoded 这种格式的特点就是,name/value 成为一组,每组之间用 &...