문제

이것은 모순일 수도 있지만 함수형 프로그래밍 스타일에서 데이터 엔터티를 어떻게 업데이트합니까?내가 읽은 바에 따르면 함수형 프로그래밍은 변환을 사용하여 불변 엔터티에 대한 출력을 반환합니다.제가 생각할 수 있는 유일한 방법은 원래 엔터티를 완전히 교체하는 것인데, 이는 기존 업데이트 접근 방식과 거의 동일해 보입니다.

도움이 되었습니까?

해결책

디스크 데이터베이스 엔티티 또는 메모리의 데이터 구조에 대해 이야기하고 있습니까?

후자의 경우 기능적 언어는 영구 데이터 구조를 사용하여 새 버전과 기존 버전이 모두 업데이트 후 사용할 수 있도록 구현되지만 공통 부분을 공유하여 효율적입니다. 그래서 당신은 완전히 새로운 데이터를 반환하는 것처럼 보이지만 실제로는 대부분의 구현을 수정 한 것과 공유합니다.

Clojure Source (Java로 작성)에서 볼 수있는 좋은 구현이 있습니다. 나는 내 블로그에서 그들 중 두 개를 가져갔습니다.

http://www.loufranco.com/blog/files/20-days-of-clojure-day-7.html

http://www.loufranco.com/blog/files/20-days-of-clojure-day-8.html

다른 팁

루 프랑코가 있어요.기능적 언어의 데이터 구조는 이를 수정하기 위해 원래 엔터티를 "완전히 대체"하도록 구현됩니다.뒤에서는 여전히 대부분의 이전 버전을 사용합니다.단지 변경된 비트를 교체할 뿐입니다.이전 버전도 여전히 존재하지만 아무도 참조하지 않는 한 가비지 수집으로 인해 결국 폐기됩니다.

짧은 대답은 기능적 스타일에서 각 데이터 엔티티가 불변이 없기 때문에 업데이트는 실제로 .NET에서 문자열이 작동하는 방식과 같은 업데이트 된 값을 가진 새로운 데이터 엔티티입니다.

IO를 다룰 때 정말 흥미로운 도전이 발생하며 순전히 기능적인 방식으로 I/O를 모델링하기가 어려워집니다. 모나드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top