@@ -46,13 +46,17 @@ defmodule Cas.Cell do
4646 iex> cell = Cas.Cell.new(1)
4747 iex> Cas.Cell.swap!(cell, fn v -> v + 99 end)
4848 100
49+
50+ iex> cell = Cas.Cell.new(1)
51+ iex> Cas.Cell.swap!(cell, fn v, a, b, c -> v + a + b + c end, [4, 5, 6])
52+ 16
4953 """
5054 def swap! ( % __MODULE__ { id: id , table: table } = cell , f , args \\ nil ) do
5155 [ { ^ id , old_value } = old_kv ] = :ets . lookup ( table , id )
5256
5357 new_value =
5458 if args do
55- f . ( old_value , args )
59+ apply ( f , [ old_value | args ] )
5660 else
5761 f . ( old_value )
5862 end
@@ -96,13 +100,17 @@ defmodule Cas.Cell do
96100 iex> cell = Cas.Cell.new(1)
97101 iex> Cas.Cell.swap_old_and_new!(cell, fn v -> v + 99 end)
98102 {1, 100}
103+
104+ iex> cell = Cas.Cell.new(1)
105+ iex> Cas.Cell.swap_old_and_new!(cell, fn v, a, b, c -> v + a + b + c end, [4, 5, 6])
106+ {1, 16}
99107 """
100108 def swap_old_and_new! ( % __MODULE__ { id: id , table: table } = cell , f , args \\ nil ) do
101109 [ { ^ id , old_value } = old_kv ] = :ets . lookup ( table , id )
102110
103111 new_value =
104112 if args do
105- f . ( old_value , args )
113+ apply ( f , [ old_value | args ] )
106114 else
107115 f . ( old_value )
108116 end
0 commit comments