请求解答下Scala初学疑问?

1.
clipboard.png
请教:` def main(args: Array[String]) {} 为什么每一个odject里面都有这个函数,
其中args: Array[String] 这一部分永远 都是这样写吗?因为我看了好多代码都是这样写的。`

2.
clipboard.png

def delayed( t: => Long ) = {} 
这个代码中  t: => Long 中 => 什么意思?函数的声明定义中好像没有这种表达方式呀?

3.
clipboard.png

这个函数 def layout[A](x: A) =... 中的 函数名之后有一个[A] 这个也不符合函数定义的语法呀,这样表示是什么意思?

4.
clipboard.png

这个里面 <= 符号表示 赋值吗?等价于 i=1 吗?

5.
clipboard.png

求解释下这个变量   var userDir = () => { System.getProperty("user.dir") }

6.
clipboard.png
这两块代码解决的是同一个问题,主要不同在于 部分应用函数 。
我的疑问是,天然的我会用第一种方法解决这个问题,为什么还会有第二种方法的诞生?

7.
clipboard.png
闭包的意义是什么?
我在python学习的时候, 这样定一个函数这和闭包的却别是什么?闭包有什么特殊意义?

z=5
def a(v):
    sum = v+z
    return sum
     

8.
clipboard.png

是不是也可以写成?a.trim 省略掉圆括号呢?

9.
clipboard.png
这里面的 e ex th 都有什么特殊意义吗?

阅读 3.2k
3 个回答
  1. Scala没有静态方法或静态字段,在Java中的主函数入口public static void main(String[] args) {}的代替方案有两种,第一种是题中给的方案,第二种是扩展App特质object Demo extends App。Scala语言是JVM平台语言,main方法里面的args的参数是接收运行参数的,现在比较少用了。
  2. Scala 里有两种求值策略(Evaluation Strategy):Call By Value - 对函数实参求值,且仅求值一次;Call By Name - 函数实参每次在函数体内被用到时都会求值。如果函数形式以 => 开头,那么会使用 Call By Name,按名调用,不求实参,直接替换形参,在函数体内每次使用时进行求值。
  3. Scala中,我们用方括号来定义类型参数,这里指定的类型参数是泛类型,Scala会从调用该方法使用的实际参数来推断出类型。
  4. <=——小于等于
  5. 这只是一个不带参数的匿名函数而已。
  6. 第二种方法logWithDateBound是一个带函数参数的函数,有个专门的叫法叫部分应用函数(Partial Applied Function):缺少部分参数、只对函数定义域的一个子集进行定义的函数。 为什么会有第二种方法……额……Scala高阶函数语法特性很多:柯里化、控制抽象等等。函数式很优美,但代码可读且自己熟练能用才是最重要的。
  7. 闭包由代码和代码用到的任何非局部变量定义构成。闭包的意义因人而异,比如:是一种能够把一个匿名函数当参数传递的一个语法糖,或者说更强大的抽象能力什么的。Py没深入学过。
  8. = =|||试一下不就知道了,还可以写成这样:a trim
  9. 没有。

从第一个问题看你可能没学过其他任何编程语言,个人认为 Scala 可能并不适合入门编程。推荐先看看 Java ,然后再学 Scala 就顺理成章了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进