diff --git a/ext/AxisKeysExt.jl b/ext/AxisKeysExt.jl index 80fd19c..0621ba2 100644 --- a/ext/AxisKeysExt.jl +++ b/ext/AxisKeysExt.jl @@ -10,4 +10,11 @@ Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Int}, v) = @set axis Accessors.set(x::KeyedArray, f::Base.Fix2{typeof(axiskeys), Symbol}, v) = @set named_axiskeys(x)[f.x] = v Accessors.set(x::KeyedArray, ::typeof(AxisKeys.keyless_unname), v::AbstractArray) = KeyedArray(v; named_axiskeys(x)...) + +function set(x::KeyedArray, ::typeof(reverse), v::AbstractVector) + res = similar(x, eltype(v)) + res .= v + reverse!(res) + res +end end diff --git a/src/functionlenses.jl b/src/functionlenses.jl index f963aa0..e6ed40e 100644 --- a/src/functionlenses.jl +++ b/src/functionlenses.jl @@ -97,6 +97,12 @@ function set(x::AbstractVector, ::typeof(reverse), v) reverse!(res) res end +function set(x::AbstractVector, ::typeof(reverse), v::AbstractVector) + res = similar(x, eltype(v), size(v)) + res .= v + reverse!(res) + res +end set(obj, o::Base.Fix1{typeof(map)}, val) = map((ob, v) -> set(ob, o.x, v), obj, val) diff --git a/test/test_functionlenses.jl b/test/test_functionlenses.jl index 2ec966e..659c20d 100644 --- a/test/test_functionlenses.jl +++ b/test/test_functionlenses.jl @@ -188,6 +188,7 @@ end @test set([1, 2], reverse, (3, 4)) == [4, 3] @test set((1, 2), reverse, [3, 4]) === (4, 3) @test set((a=1, b=2), reverse, [3, 4]) === (a=4, b=3) + @test set([1, 2, 3], reverse, [5, 6]) == [6, 5] C = KeyedArray([1,2,3], x=[:a, :b, :c]) @test (@set vec(C) = [5,6,7])::KeyedArray == KeyedArray([5,6,7], x=[:a, :b, :c])