scala 基本语法

Scala的基础语法(超详细版) Scala的基础语法,每种编程语言都有一套自己的语法规范,Scala语言也不例外,同样也需要遵循一定的语法规范,本博客将针对Scala的基本语法进行介绍。 阅读详情
package Demo
import scala.collection.mutable
import scala.collection.mutable.{ArrayBuffer, Set}
//传名和传值参数
object Demo01 extends App {

  def time()={

    println("获取时间,单位为毫秒")
    System.nanoTime()//时间毫秒

  }


//传值调用,直接获取参数名中的值放入主函数中    传值调用(call-by-value)
  def delayed(t:Long) ={

    println("在delayed方法内")

    println("参数为"+t)

  }

//  获取时间,单位为毫秒
//  在delayed方法内
//  参数为10874963211520
delayed(time())


//传名调用当遇到参数名的时候 计算参数名中的逻辑    传名调用(call-by-name)
  def delayedd(t : =>Long) = {

    println("在delayed方法内")

    println("参数为" + t)
  }
//
//  在delayed方法内
//  获取时间,单位为毫秒
//  参数为11088250581065

  delayedd(time())

//高阶函数
  val salaries=Seq(20000,30000,50000)//定义数组
  val doublesalary= (x: Int)=> x*2//函数
  val newSalaries =salaries.map(doublesalary)//map方法
  println(doublesalary)//函数名function
  println(newSalaries)//40000,60000,100000
  println(salaries.map(_*2).mkString)//等同于上面的三个式子 mkstring 可以把集合转为字符串

//匿名化 指 没有函数指向定义的变量
  val arr =Array(3,6,9)
  val result=arr.map(a => a*3)
  println(result.mkString(""))


  val arrr=Array(3,6,9)
  val resull=arrr.map(3 *_)
  println(resull.mkString(""))


  val arrs=Array(3,6,9)
  val arrd=arrs.map(_ *2)
  println(arrd.mkString(""))


  //高阶函数1-1
  def m6(x:Int,y:Int,f1:(Int,Int) =>Int): Any =
  {
    f1(x,y)
  }

  val sn=(x:Int,y:Int)=>x*y//定义的函数 在里面写相应的逻辑
  m6(3,6,sn)//传入俩个参数3,6给方法 传入函数sn给方法的f1



  //高阶函数1-2
  def test(n1:Int,n2:Double,f : Int =>Double,f1 : (Double,Int) => Int)={

    f(f1(n2,n1))//②先运算f1函数里的逻辑 在运算f逻辑

  }

  def sanx(s : Int):Double ={

    s+s+1

  }

  def sum(d : Double,d1:Int ) :Int={
    (d*d1).toInt
  }


  val res =test(6,3.0,sanx,sum)//①sanx指向test的f 3.0默认指向n2,6默认指向n1,也可以n1=6,n2=3.0
  println(res)//37




  //高阶函数2 返回函数

  def test(x: Int)={//括号可以去掉

    (y:Int)=>x-y//匿名函数

  }

  val f1=test(3)//f1=(y:Int)=>3-y 即只要f1,只要在f1的生命周期内3是不会变的永远是他
  println(f1(9)) //f1=(9:Int)=>3-9  这个9传给的是y 即3-9

  //也可以写成这样 柯里化 一步到位 现将3传给了x (y:Int)=>3-y 但是没有变量接收 然后在传进一个9  (9:Int)=>3-9
  println(test(3)(9))





  def m2(f:(Int,Int)=>Int)= f(2,6)//def 这是方法,方法名为m2,参数为俩个Int返回类型=>代表为要引用传名函数 f(2,6)为调用自身的并引入参数

  val f2=(x:Int,y:Int)=>x+y//函数
  println(m2(f2))//将函数放入方法中进行加法运算

  println(m2((x:Int,y:Int)=>x+y))//直接上匿名函数吧
  println(m2(_+_))//终极输出 这才是我喜欢的方式




  //高阶函数值传递方法

  def m7(s:Int,x:Int,f1:(Int,Int)=>String): Any =  //方法1
  {
    f1(s,x)
  }


  def m8=((x:Int,y:Int)=>x.+("qqq")+y.+("ggg")) //方法2

  println(m7(2,3,m8))  //2,3为m7方法的参数,m8为方法传入m7内 实际上是将m8的方法转换为函数传入m7


//闭包

  val factor =3//闭包就是在函数之外 在定义一个参数
  val nim=( i : Int)=> i*factor//闭包函数 i是匿名函数的形参,自由变量factor含义是引用函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

  println(nim(3))//3*3=9


  //string 在定义之后就不可改变了 但是可以使用String bulider类
  val buf = new StringBuilder;//''只能是一个字符 char 并且是+=  ""是双引号可以添加多个字体 并且是++=
  buf += 's'
  buf += 'a'
  buf ++= "sss"
  buf += 'a'
  buf ++="aaaa"
  buf ++="abcdefg"
  val buff=new String("ssss")

  println(buff.concat(buf.mkString),buff+buf)//字符串连接
  println(buf.charAt(0))//返回指定位置的字符
  println(buff.compareTo("sss"))//按字典顺序比较俩个字符串
  println(buff.endsWith("s"))//判断字符串是否以指定的字符结尾

  var z:Array[String] = new Array[String](3)//定义容量为3的string的array数组
  z(0)="33";z(1)="4";z(2)="55"//给下角标为0 1 2 赋值
 z=Array("ss","dd","56a")//也可以直接用array赋值
  var v=Array("s","d")//直接array赋值

  for(i<-0 to v.length)//i到v长度的循环
    {
      println(i)//1 2
    }


  val sdf=new ArrayBuffer[Int]()//可变长度数组
  sdf.+=(2)
  sdf.+=(3)
  sdf.+=(4,5,6)
  sdf.insert(0,-1,0)//在0下角标添加俩个位置-1 0
  sdf.append(10)//追加
  println(sdf.toBuffer)

  val ssdd=Array(("tingting",24),("huanhuan",25),("hahaha",36.0))//定义array的元祖
  println(ssdd.toMap)//array转Map(tingting -> 24, huanhuan -> 25, hahaha -> 36.0)

  val ss=Array(3,4,5,99)
  val dd=Array(7,8,9)
  val asd=ss.zip(dd)//拉链 下角标相同的对应
  println(asd.toBuffer)//ArrayBuffer((3,7), (4,8), (5,9))

  val mywords= ss++dd//俩个数组的拼接
  for(i<- mywords){

    println(i)

  }


val site:List[String]=List("st","ea","s")//定义list
  for(i <- site)
    {
      println(i)
    }

val sitt="st"::("ea"::("m":: Nil))//等同于上面

  println(sitt.isEmpty)
  println(sitt.head)
  println(sitt.tail)
  println(sitt.:::(site))//连接俩个list集合
  println(sitt.::("ssda"))//向sitt添加ssda
  println(0::site)//向sitt添加ssda
  println(sitt.+:("h"))//向头部插入一个和::区别不大
  println(sitt.:+("o"))//向尾部插入一个


  val si=List.fill(3)("Runnoob")//重复3次Runnoob
  val sii=List.fill(3)(9)//重复3次9
  println(si)


  var summ=2::(1::(4::(3::Nil)))//定义list数组
  summ=List.tabulate(5)((s:Int) =>s*2)//通过给定的函数创造列表 0 2 4 6 8,方法的第一个参数为元素的数量,可以是二维的,第二个参数为指定的函数,我们通过指定的函数计算结果并返回值插入到列表中,起始值为 0
  summ= List.tabulate(5)(_*2)//等同于上面
  println(summ)


  val p=Set(1,2)
  println(p.getClass.getName)//默认不可变集合scala.collection.immutable.HashSet$HashTrieSet
  println(p.exists(_%2==0))//true

  val p1=Set(2,3)
  println(p1.getClass.getName)//import scala.collection.mutable.Set可以增加数组内的内容
  p1.+=(6)//增加一个元素6
  println(p1)

  println(p.&(p1))//显示俩个set数组的交集数 2

  val it =Iterator("hauwei","baidu")
  while (it.hasNext)
    {
      println(it.next())
    }


  var sssss:Map[String,Int]=Map("s"->1,"q"->9)
  sssss += ("ss" -> 1)//添加元素
  println(sssss("s"))//按key拿值
  println(sssss.values)
  println(sssss.keys)
  println(sssss.isEmpty)
  sssss.keys.foreach {i=>println(i);println(sssss(i))}
  println(sssss.getOrElse("sss",1))//当map容器内没有sss的key时 则会输出1


  val ts=("s",5,5.6,'s')//定义元祖
  val tts=new Tuple3(1,3.14,"sd")//Tuple3为容纳3个元素的元祖
  val sume=tts._1+tts._2+tts._3//将下角标为1 2 3 加在一起
    println(sume)//4.140000000000001sd
  val sst =new Tuple2[String,String]("s","d")//定义一个容纳为2个元素的元祖 方括号内的类型可写可不写
  println(sst.swap)//元素交换 位置互换,只能在俩个元素的元祖的时候使用
  tts.productIterator.foreach{ i =>println("Value = " + i )}
//  Value = 1
//  Value = 3.14
//  Value = sd


  class point(xc:Int,yc:Int)//定义类 并且俩个参数接收x y
  {
    var xx=xc
    var yy=yc

    def move (dx:Int,dy:Int):Any = {//定义方法 写个逻辑

      xx=xx+dx
      yy=yy+dy
      println(xx+"\t"+yy)
    }
  }
    new point(3,1).move(4,5)


  }
内网(极空间)搭建gitlab跳板机转发端口及域名配置 然后,回头尝试用内网地址+15022 clone,成功,用公网的ip+15222 clone失败,那就是定位到时nginx转发的问题了。首先想到的就是 git clone是通过ssh的22端口进行下载的,那就需要打通22端口,则又配置22端口的nginx转发。然后,我通过ssh命令,做一个端口转发,以实现内网穿透,将服务端口链接到跳板机上。然后穿透到阿里云服务器跳板机的端口,只能内网访问,需要用nginx做个转发,才能用公网ip进行访问。然后,如上,我的80端口,映射15080,22端口映射15022。 阅读详情

相关推荐

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2122

Scala的基本语法

Scala的基本语法

qq_53276543的博客 2331

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 5002

scala 基础语法

1. scala 基本语法 1.1 声明变量 object VariableDemo { def main(args: Array[String]) { //使用val定义的变量值是不可变的,相当于java里用final修饰的变量 val i = 1 //使用var定义的变量是可变得,在Scala中鼓励使用val var s = "hello" //Sc...

zhangxiping 1548

离散数学期末考试试卷(两套)-熟悉题型

3.设集合A={a,b,c,d}上有自反关系R={,,,,},对称关系S={,,,}。6.设集合A={1,2,3},B={u,v,w},C={a,b,c},f是集合A到集合B上的映射,g是集合B到集合C上的映射,f={, , },g={},则复合函数g。5. 设集合A={a,b,c,d,e},下列选项中哪一个集合不是A的划分( )。

muse3159546973的博客 6957

微信图片.dat文件解密实战:用Python一键转PNG(附完整代码)

本文详细介绍了如何通过Python解密微信图片.dat文件并转换为PNG格式的完整教程。文章深入解析了微信.dat文件的异或加密原理,提供了自动检测密钥的Python脚本,并分享了批量解密和性能优化的实用技巧,帮助用户轻松恢复和整理微信聊天图片。

weixin_29096377的博客 465

Scala 第一篇 基础篇

Scala 第一篇 基础篇:一、变量与常量,二、数据类型,三、运算符四、程序逻辑,五、集合,六、函数,七、数组方法(重点)

weixin_74292291的博客 2092

Lumerical官方案例、FDTD时域有限差分法仿真学习(十四)——超透镜(Metalens)

这个例子的目的是设计一个由圆柱形纳米棒组成的衍射超透镜。 纳米棒的半径和排列经过调整以在超透镜表面上产生所需的相位分布。 该设计通过近场和远场分析在 Ansys FDTD、RCWA(严格耦合波分析)和 OpticStudio 中得到验证。...

weixin_45719141的博客 3万+

3.28笔记

Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。scala中没有提供++、--操作符,我们只能使用+和-,比如num = 1,num ++是错误的,必须写做num += 1。scala的算术操作符与java的算术操作符也没有什么区别,比如+、-、*、/、%等,以及&、|、^、>>、<<等。但是,在scala中,这些操作符其实是数据类型的方法,比如1 + 1,可以写做1.+(1)Raw:除了对字面值中的字符不做编码外,raw 插值器与 s 插值器在功能上是相同的。

2502_90678012的博客 208

【Unity】网络游戏实战(序章)MMORPG大型多人在线角色扮演 + 中国象棋联网对战

本系列会基于两种常见的网络游戏类型(MMORPG大型多人在线角色扮演和多人棋牌),从零开始实现网络游戏开发中的大多数环节。【杜绝代码炫技】本系列杜绝代码炫技,摈弃那些高深的设计模式,一切业务逻辑的实现代码追求浅显易懂,即便是网络编程菜鸟,也能循序渐进掌握本系列的核心要点。【授之鱼也授之渔】与一些开源库那样只授予源码不同,本系列还会基于各个技术要点展开详解,并结合切实的可直接运行的Demo,授之鱼更授之渔。

神码编程 1963

YOLOv8改进:注意力系列篇 |高效的通道先验卷积注意力(CPCA) | 中科院 2023.6

高效的通道先验卷积注意力(CPCA)方法,支持注意力权重在通道和空间维度上的动态分布;

会AI的学姐 2043

scala的基本语法

强类型语言:Java弱类型语言:JS、Scalavar定义变量;val定义常量。

2502_90678862的博客 799

XCP实战系列介绍07-使用ASAP2 Editor生成A2l文件详解

介绍通过ASAP2 Editor工具生成A2l文件步骤详解

initiallizer的博客 7298

scala基本语法

1.Scala 基本语法需要注意以下几点: 区分大小写:Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。 类名:对于所有的类名的第一个字母要大写。 如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。 示例:object MyFirstScalaClass 方法名称:所有的方法名称的第一个字母用小写。 如果若干单词被用于...

yanshui_shui的集合解析 375

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Scala基本语法

1.1、Scala安装包链接:https://pan.baidu.com/s/1eL6TglpyHsvk9fwEOMu6_w?pwd=1pyu提取码:1pyu1.2 配置SCALA_HOME和path,具体和java配置一样1.3 验证。

libaowenBlog的博客 521

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Scala——基本语法

Scala基本语法1 语法的简单说明2 基本语法2.1 注释2.2 变量和常量2.3 标识符的命名规范2.4 字符串输出2.5 键盘输入2.6数据类型2.7 整数类型(Byte、Short、Int、Long)2.8 浮点类型(Float、Double)2.9 字符类型(Char)2.10 布尔类型:Boolean2.11 Unit类型、Null类型和Nothing类型2.12 类型转换2.12.1 数值类型自动转换2.12.2 强制类型转换2.12.3 数值类型和String类型间转换 Scala是一门以J

qq_42873479的博客 1193

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Scala环境配置以及基本语法

1.进Scala的官网,点击下载 2.选择要下载的是msi还是zip 3.我选择的是msi,然后进行手动安装; 4.环境搭建: (1)环境变量的配置:首先配置一个SCALA_HOME (2)然后配置PATH (3)测试 出现上图就表示成功 5.数据类型 Scala 和 Java 一样,有 7 种数值类型 Byte、Char、Short、Int、Long、Flo...

为了九亿少女的期待 477

Scala的基本语法(二)

推荐使用函数式的风格解决break 和continue 的功能,而不是一个关键字。2)for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号。循环守卫,即循环保护式(也称条件判断式,守卫)。方式四:循环遍历 10 以内的所有数据,奇数打印,偶数跳过(continue)需求:将原数据中所有值乘以 2,并把数据返回到一个新的集合中。需求:鸡兔一共有35只,脚一共有94只,问鸡和兔各多少只?倒序打印 10 到 1。

2401_82425686的博客 1386

scala基本语法速查手册

val 不可变 var可变 val myStr=“hello world!” val myStr1:String=“hello world!” val myStr2:java.lang.String=“hello world!” import java.lang._ //java lang包里所有东西 Scala数据类型(都是类,scala.Int) 特殊:String java.lan...

Fantastic_Liar的博客 617

scala语言——基本语法

1、输出的三种方式 字符串通过+号连接(类似java) println("name=" + name + " age=" + age + " url=" + url) printf用法 (类似C语言)字符串通过 % 传值。(格式化输出) printf("name=%s, age=%d, url=%s \n", name, age, url) 字符串插值:通过$引用(类似PHP...

qq_30122883的博客 394

Scala语言入门以及基本语法

Scala环境的配置以及简单语法使用。

qq_37400096的博客 1252
上一篇: scala指定参数函数,匿名函数,高阶函数特征
下一篇: scala版worldCount
Alwaysdazz
博客等级 码龄8年 25粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值