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