在clojure中的不变性是否与按值传递不同?

 笑如夏风_503 发布于 2023-02-11 17:29

我刚刚开始使用Clojure而且我没有fp经验,但我注意到的第一件事就是强调不变性.然而,我对重点感到有些困惑.看起来您可以轻松地重新定义全局变量,从根本上为您提供一种改变状态的方法.我能看到的最重要的区别是函数参数是按值传递的,不能在函数内重新定义.这是一个显示我的意思的repl片段:

 towers.core=> (def a "The initial string")
 #'towers.core/a
 towers.core=> a
 "The initial string"
 towers.core=> (defn mod_a [aStr]
     #_=>   (prn aStr)
     #_=>   (prn a)
     #_=>   (def aStr "A different string")
     #_=>   (def a "A More Different string")
     #_=>   (prn aStr)
     #_=>   (prn a))
 #'towers.core/mod_a
 towers.core=> a
 "The initial string"
 towers.core=> (mod_a a)
 "The initial string"
 "The initial string"
 "The initial string"
 "A More Different string"
 nil
 towers.core=> a
 "A More Different string"

如果我通过将它视为价值传递而开始理解clojure中的不变性,那么我错过了什么?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有