T******7 发帖数: 1419 | 1 atom这个概念怎么理解比较好?只能用在non side effect的函数里? |
p*****2 发帖数: 21240 | 2
atom应该是有side effect的吧?
【在 T******7 的大作中提到】 : atom这个概念怎么理解比较好?只能用在non side effect的函数里?
|
h*i 发帖数: 3446 | 3 atom很简单,可以把atom理解成其他编程语言里面的变量(mutable),更确切的说,它
很像C里面的指针,但是tread safe的。
初学者要记住swap!的时候不是传新的值进去就行,而是要传一个函数进去,来转换旧
的值。这个转换函数必须是没有副作用的,因为可能别的线程也在访问这个atom,这个
转换函数可能会被试几次才成功。
用到atom的时候记得deref,@,所以我说它像指针。
atom可以用在任何地方。但idomatic的用法,是用来做可变状态的容器。比如写一个非
常简单的小游戏的话,可以把整个游戏世界的状态用一个map来描述,然后把这个map放
到一个atom里面;再比如数据库连接的状态,也可以放入一个atom里面。等等。
【在 T******7 的大作中提到】 : atom这个概念怎么理解比较好?只能用在non side effect的函数里?
|
T******7 发帖数: 1419 | 4 多谢@hci
我看书上说 atom是 Uncoordinated的。
ref 是 cordinated.
这里的cordinated 的意思是不是就是说支持compound operations? |
h*i 发帖数: 3446 | 5 refs的操作必须在transaction里面进行。coordinated的是说,在一个transaction里
面,各个refs的操作要么都成功,要么都不成功。和数据库的transaction一样的。
atom没有上面的特性。
【在 T******7 的大作中提到】 : 多谢@hci : 我看书上说 atom是 Uncoordinated的。 : ref 是 cordinated. : 这里的cordinated 的意思是不是就是说支持compound operations?
|