@@ -35,23 +35,36 @@ struct VarName{sym, T<:Lens}
35
35
VarName {sym} (indexing= IdentityLens ()) where {sym} = new {sym,typeof(indexing)} (indexing)
36
36
end
37
37
38
+ # A bit of backwards compatibility.
39
+ # TODO : Should we deprecate this?
40
+ VarName {sym} (indexing:: Tuple ) where {sym} = VarName {sym} (tuple2indexlens (indexing))
41
+
38
42
"""
39
- VarName(vn::VarName, indexing=())
43
+ VarName(vn::VarName, indexing::Lens)
44
+ VarName(vn::VarName, indexing::Tuple)
40
45
41
46
Return a copy of `vn` with a new index `indexing`.
42
47
43
- ```jldoctest
48
+ ```jldoctest; setup=:(using Setfield)
49
+ julia> VarName(@varname(x[1][2:3]), Setfield.IndexLens((2,)))
50
+ x[2]
51
+
44
52
julia> VarName(@varname(x[1][2:3]), ((2,),))
45
53
x[2]
46
54
47
55
julia> VarName(@varname(x[1][2:3]))
48
56
x
49
57
```
50
58
"""
51
- function VarName (vn:: VarName , indexing= IdentityLens ())
52
- return VarName {getsym(vn)} (indexing)
59
+ VarName (vn:: VarName , indexing:: Lens = IdentityLens ()) = VarName {getsym(vn)} (indexing)
60
+
61
+ function VarName (vn:: VarName , indexing:: Tuple )
62
+ return VarName {getsym(vn)} (tuple2indexlens (indexing))
53
63
end
54
64
65
+ tuple2indexlens (indexing:: Tuple{} ) = IdentityLens ()
66
+ tuple2indexlens (indexing:: Tuple{<:Tuple} ) = IndexLens (first (indexing))
67
+ tuple2indexlens (indexing:: Tuple ) = IndexLens (first (indexing)) ∘ tuple2indexlens (indexing[2 : end ])
55
68
56
69
"""
57
70
getsym(vn::VarName)
0 commit comments