scala的方法

1.方法声明/定义:

首先,在Scala中 方法和函数 是有一定区别的,本文记录方法的一些学习,   区别详见https://blog.youkuaiyun.com/hzp666/article/details/114658510?spm=1001.2014.3001.5501

 

声明方法:

def methodName1 (p1:Int, p2:Int) : Int = {

val c = a+b

return c

}

ps: 花括号前边的 = 等号可以不用写,系统会自动带上,可以像写Java一样  写完 方法名称 参数 直接写花括号

如果方法没有返回值,则方法后边的 = 也可以省略

eg:  //省略方法后边 = 
  var b =0
  def add(c:Int){
    b += c
  }
add(666)
println(b)

输出:

 

 

 

 

2.简化版声明:

2.1 最简化版声明:def methodName1 = print("most Lite version method ")    //most lite version to create a method

即:#方法中 参数列表可以省略(函数不能省略),

#如果没有设置返回值,则返回类型 也可省略

#如果返回值类型,可以被系统自动推断出来,则返回值类型可以省略

#如果方法没有返回值,则方法后边的 = 也可以省略

#如果只有一行,则方法体的花括号也可以省略 {}

#return 也可以省略,默认返回最后一行, 如果最后一行是 print()  那什么都不返回

 

可省略不可省略
方法中 参数列表可以省略(函数不能省略)如果有参数,则参数的类型不可省略
如果没有设置返回值,则返回类型 也可省略 
如果只有一行,则方法体的花括号也可以省略 {} 
return 也可以省略,默认返回最后一行, 如果最后一行是 print()  那什么都不返回 

 

2.2 如果有 return 语句 则必须设置 返回类型  即:

def methodName1 :Int ={

return 3

}

 

 

2.3 如果 方法体中 没有写 return 字符,则默认返回最后一行

eg: 

def methodName1 :Int ={

 3

}

即:return 可以省略,默认返回最后一行 3

 

2.4 如果有参数列表,则参数类型 不能省略

def methodName1(a: Int, b:Int) :Int =  a+b    //返回  a+b 的和

 

1.2 声明方法时的参数小括号

参数的小括号 如果 方法不需要传参数 则参数小括号可以省掉,  如果省略掉的话,在调用该方法时  是不能带 () 的 ,直接写方法名 即可;

如果声明的方法 中 不需要传参,但是保留了 () , 则在调用时可以 带() ,也可以不带()

eg: 

  def add :Int={
  return  3
  }
println(add)  //调用方法时候 不要写(), 写了会报错

输出:

 

ps: 如果声明的方法 中 不需要传参,但是保留了 () , 则在调用时可以 带() ,也可以不带

 

3.赋值给函数

4.方法转变为函数

使用神奇的下划线    _   ,将方法变为 函数

def changeMethod1 (a:Int, b:Int)={
  println("test here")
  a+b
}

val mVar = changeMethod1 _
println(mVar(1,2))

5.传名调用

即把方法作为参数,传入另一个方法中

eg:

def getTime()={

  print("这是 getTime方法")

  System.nanoTime
}


//设置 方法参数列表的一般格式:  (参数名 : => 方法返回类型)
def test(f: => Long)={

  print("time is "+f)

}

test(getTime())

 

6.scala中 类似Java的 get/set 方法

 

eg:

 

class classTest{
  private var privateVar = 0;
  def value=privateVar    //like java's get method

//like java's set method
  def value_=(newValue:Int): Unit ={  
    if(newValue>0){
      privateVar = newValue
    }

  }


}


val myClassTest = new classTest

//set value
myClassTest.value=3

//get value
println(myClassTest.value)

输出:

 

7.中缀调用法 infix

当调用一个方法时候 可以直接写成 :    变量  方法名  变量

eg1:

 

class MyClass{
  def add(b:Int): Int ={
    var c = b +3;
    return c
  }}


val clazz = new MyClass
println(clazz add 3)  //infix statement

输出:

 

eg2:

class MyClassTest{
  private var age = 0

  def increment(addAge :Int){
    return age += addAge
  }

  def curent:Int={age}

  def getAge():Int ={
    return age
  }

}
val classTest = new MyClassTest
classTest increment 5   //infix statement
println("this is current method :", classTest.curent)
println("this is getAge method :", classTest.getAge())

输出:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值