【问题标题】:How to write Scala in functional way -- case classes and immutability and all that? [closed]如何以函数式的方式编写 Scala——案例类和不变性等等? [关闭]
【发布时间】:2012-10-17 01:31:19
【问题描述】:

我在现场观看了一场演讲,有人说他们在工作中正在使用 Scala 功能,他们使用案例类,将类型转换为另一种类型,无处不在的不变性,等等。

这实际上是如何工作的?我很想看到一个采用纯函数式方法的简单 hello world 应用程序。

我也不知道如何完全摆脱var,因为有时我只是需要它。

【问题讨论】:

标签: scala functional-programming


【解决方案1】:

Coursera 上有一个 course 就是这样。

【讨论】:

    【解决方案2】:

    “Hello world”并不是很好地展示函数式方法,因为它没有任何函数式。 (事实上​​,正如@delnan 所说,写入标准输出被认为是一种副作用,所以这个程序永远不能成为纯粹的函数式。)

    您需要var 的最可能原因是使用命令式循环,这确实不是函数式方法。等效的功能是在集合上使用一些可用的过滤器/转换函数,或者使用递归。

    简单示例:查找列表中以“F”开头的所有字符串。命令式(Java):

    List<String> result = new ArrayList<String>();
    
    for (String s : strings) {
      if (s.startsWith("F")
        result.add(s);
    }
    

    使用旧式迭代器循环会更加明显。

    相比之下,函数式风格可能是这样的:

    val result = strings.filter(_.startsWith("F"))
    

    【讨论】:

    • 我认为通过递归来说明函数式方法会更正确。因为不清楚当您调用“过滤器”时会发生什么。您可以在过滤器内有一个 for 循环,它会保持功能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多