Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以函数式的方式编写Scala——case类和不变性等等?_Scala_Functional Programming - Fatal编程技术网

如何以函数式的方式编写Scala——case类和不变性等等?

如何以函数式的方式编写Scala——case类和不变性等等?,scala,functional-programming,Scala,Functional Programming,我在现场观看了一个演讲,有人说他们在做Scala功能,他们使用case类,将一种类型转换为另一种类型,无处不在的不变性,等等 这实际上是如何工作的?我很想看到一个简单的hello world应用程序,它采用纯函数方法 此外,我也不知道如何才能完全摆脱var,因为有时我只是需要它。“Hello world”并不能很好地演示函数式方法,因为它没有任何功能。(事实上,正如@delnan所指出的,写入标准输出被认为是一种副作用,因此该程序永远不能完全实现功能。) 您需要var的最可能的原因是使用命令式循

我在现场观看了一个演讲,有人说他们在做Scala功能,他们使用case类,将一种类型转换为另一种类型,无处不在的不变性,等等

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

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

“Hello world”并不能很好地演示函数式方法,因为它没有任何功能。(事实上,正如@delnan所指出的,写入标准输出被认为是一种副作用,因此该程序永远不能完全实现功能。)

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

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


关于这一点,有一个在线培训。

你就这么做吧。你是否有一个具体的例子,你不能转化为纯粹的功能性风格?Hello world看起来也一样,如果我们忽略这个事实,即它是不纯净的,因此会被回避(但显然是必要的)。也许这会对你有所帮助:我认为通过递归来说明函数方法会更正确。因为不清楚当你调用“过滤器”时会发生什么。你可以在过滤器里有一个for循环,那么它会继续工作吗?
List<String> result = new ArrayList<String>();

for (String s : strings) {
  if (s.startsWith("F")
    result.add(s);
}
val result = strings.filter(_.startsWith("F"))