Functional programming 如何将面向对象编程和函数式编程结合使用?

Functional programming 如何将面向对象编程和函数式编程结合使用?,functional-programming,Functional Programming,Scala声称OO和FP可以结合使用。 我想知道如何在实践中做到这一点。我的意思是对象可以改变,所以使它们不可变意味着每当某些东西改变时我必须创建一个新对象,对吗?这对我来说似乎不太有效 顺便说一句,如果我从函数中对对象属性进行外部引用,这是否会损害引用的透明度?不要将此视为一个范例对另一个范例施加限制,而是一个范例如何充分利用这两个范例 举个简单的例子: 对象具有对象内部的函数。现在,内部函数在对象中是不可变的,函数的结果可以用来更改对象的状态 从不同的层面思考,可以使用函数创建对象可以使用的

Scala声称OO和FP可以结合使用。 我想知道如何在实践中做到这一点。我的意思是对象可以改变,所以使它们不可变意味着每当某些东西改变时我必须创建一个新对象,对吗?这对我来说似乎不太有效


顺便说一句,如果我从函数中对对象属性进行外部引用,这是否会损害引用的透明度?

不要将此视为一个范例对另一个范例施加限制,而是一个范例如何充分利用这两个范例

举个简单的例子:

对象具有对象内部的函数。现在,内部函数在对象中是不可变的,函数的结果可以用来更改对象的状态

从不同的层面思考,可以使用函数创建对象可以使用的库


我想充分利用这两种方法的原因是,我倾向于使用函数语言为更抽象的处理创建库(模块),然后使用面向对象语言为更接近人类和外部处理的层创建库(模块)。这不是一条硬性规定,而是一条我从哪里开始的指导原则。

内部函数指的是方法:)你的意思是,如果纯函数以对象为参数,它应该做的第一件事是克隆它吗?内部函数指的是方法。是的。你的意思是,如果纯函数以一个对象为参数,它应该做的第一件事就是克隆它?不,这样想吧;该函数将从堆栈中提取对象,对其进行更改,然后将结果(可能是修改过的对象)存储在堆栈中。