美文网首页
Scala踩坑记

Scala踩坑记

作者: 泽泽馥泽泽 | 来源:发表于2018-07-25 20:57 被阅读0次

我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。

Scala 函数的不同写法

def formatDate = (_: SimpleDateFormat).format(new Date())
def formatDate(simpleDateFormat: SimpleDateFormat) : String = { return simpleDateFormat.format(new Date)}
def formatDate = (simpleDateFormat:SimpleDateFormat) => simpleDateFormat.format(new Date)

Scala Apply 函数用法

Scala中的apply方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd Edition

Every function value is an instance of some class that extends one of several FunctionN traits in package scala, such as Function0 for functions with no parameters, Function1 for functions with one parameter, and so on. Each FunctionN trait has an apply method used to invoke the function.

在Scala语言中, 函数也是对象

f: Int => Int = <function1>

这里定义了一个接收一个整型变量作为参数的函数, 函数的功能是返回输入参数加1. 那么如果我们有一个指向函数对象的引用, 我们该如何调用这个函数呢? 答案是通过Function的apply方法, 即 Function.apply(), 因此调用函数对象的方法如下:

scala> f.apply(3)
res2: Int = 4

但是如果每次调用方法对象都要通过FunctionN.apply(x, y...), 就会略显啰嗦, Scala提供一种模仿函数调用的格式来调用函数对象

scala> f(3)
res3: Int = 4

一点例子

[new HelloScala.scala]
object Hello {
  def apply(name: String): Unit = {
    println("Call From %s".format(name))
  }
}
object HelloMain {
  def main(args: Array[String]): Unit = {
    Hello.apply("World")
    println("==========================")
    Hello("world")
  }
}

运行结果:


applyexample.png

所以当调用一个Object的时候,其实就是相当于调用了这个Object的apply方法

但是apply并不等同与构造函数

scala会自动为case class 生成apply方法

case class Hello(userId:String, num:Int, itemId:String)
val t0 = new Hello("Alice", 23, "Water") // normal constructor
val t1 = Hello("Bob", 23, "T-shirt") // this uses apply
val t2 = Hello.apply("Daming", 23, "dress") // using apply manually
scala会自动为case class 生成apply方法.png

相关文章

  • Scala踩坑记

    我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。 Scala 函数的不同写法 Sca...

  • Android Material Design 踩坑记(2)

    Android Material Design 踩坑记(1) CoordinatorLayout Behav...

  • windows10 下Spark+Hadoop+hive+pys

    一、准备工作(之前踩过的坑) 1、需要安装java的jdk,scala,spark,hadoop2、jdk的版本一...

  • Deepin使用踩坑记

    1. 前言 很喜欢Deepin,奈何坑太多,不过不怕,踩过去~ 2. 踩坑记 2.1 Deepin重启后文件管理器...

  • SpringStreaming+Kafka

    摘自 :Spark踩坑记——Spark Streaming+Kafka [TOC] SpringStreaming...

  • 原生App植入React Native 踩坑记

    原生App植入React Native 踩坑记 为什么我踩坑了有一个需求要去可以在当前工程的feature/RN ...

  • [ANR Warning]onMeasure time too

    ConstraintLayout 踩坑记一次封装组合控件时的坑,我才用了集成 ConstraintLayout 来...

  • IdentityServer 部署踩坑记

    IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 Iden...

  • 踩坑记

    1、android自签名证书Glide加载不出图片 关于https中自签名证书的介绍以及OkHttp中解决自签名证...

  • 踩坑记

    6月初,看到广西龙脊梯田有个疏秧节,很是心动!我十几年前就去过龙脊,当时觉得整片的梯田又美又壮观,壮族风情浓厚,就...

网友评论

      本文标题:Scala踩坑记

      本文链接:https://www.haomeiwen.com/subject/ejmmmftx.html