add @locals macro for obtaining dictionary of local vars and values#29733
add @locals macro for obtaining dictionary of local vars and values#29733JeffBezanson merged 2 commits intomasterfrom
@locals macro for obtaining dictionary of local vars and values#29733Conversation
|
Wouldn't it make more sense for this to return a named tuple? |
|
I see this as just a reflection and debugging kind of thing, so a somewhat loosely-typed dictionary seems appropriate. The order of the variables is also going to be all over the place, so not having a well-defined order is a feature. |
|
Could this be useful in code generation as well? Something like: function eval_with_local_vars(expr::Expr, x, y)
@eval let $(dict_as_assignments(@locals))
$expr
end
endwhich would now let |
No. |
To expand on this a bit, in your example, the |
|
I just checked out the branch and it actually does have the effect that I want, so maybe I didn't describe it properly. 😊 The point is that the thing inside the function body of julia> function f(expr, x, y)
__locals__ = Base.@locals()
ex = Expr(:let, Expr(:block), Expr(:block,
:(__locals__ = $__locals__),
(:($key = __locals__[$(QuoteNode(key))]) for (key) in keys(__locals__))...,
:(__return__ = $expr),
(:(__locals__[$(QuoteNode(key))] = $key) for (key) in keys(__locals__))...,
:(__return__)))
return eval(ex)
end
f (generic function with 1 method)
julia> expr = :((a) -> a + x + y);
julia> h = f(expr, 1, 2)
#199 (generic function with 1 method)
julia> h(3)
6If it was possible to write back to the |
This may sound good but it ruins all ability to optimize anything. |
d31055e to
c7f7422
Compare
changes between Julia 1.0 and 1.1, including: - Custom .css-style for compat admonitions. - Information about compat annotations to CONTRIBUTING.md. - NEWS.md entry for PRs #30090, #30035, #30022, #29978, #29969, #29858, #29845, #29754, #29638, #29636, #29615, #29600, #29506, #29469, #29316, #29259, #29178, #29153, #29033, #28902, #28761, #28745, #28708, #28696, #29997, #28790, #29092, #29108, #29782 - Compat annotation for PRs #30090, #30013, #29978, #29890, #29858, #29827, #29754, #29679, #29636, #29623, #29600, #29440, #29316, #29259, #29178, #29157, #29153, #29033, #28902, #28878, #28761, #28708, #28156, #29733, #29670, #29997, #28790, #29092, #29108, #29782, #25278 - Documentation for broadcasting CartesianIndices (#30230). - Documentation for Base.julia_cmd(). - Documentation for colon constructor of CartesianIndices (#29440). - Documentation for ^(::Matrix, ::Number) and ^(::Number, ::Matrix). - Run NEWS-update.jl. Co-authored-by: Morten Piibeleht <morten.piibeleht@gmail.com> Co-authored-by: Fredrik Ekre <ekrefredrik@gmail.com>
changes between Julia 1.0 and 1.1, including: - Custom .css-style for compat admonitions. - Information about compat annotations to CONTRIBUTING.md. - NEWS.md entry for PRs #30090, #30035, #30022, #29978, #29969, #29858, #29845, #29754, #29638, #29636, #29615, #29600, #29506, #29469, #29316, #29259, #29178, #29153, #29033, #28902, #28761, #28745, #28708, #28696, #29997, #28790, #29092, #29108, #29782 - Compat annotation for PRs #30090, #30013, #29978, #29890, #29858, #29827, #29754, #29679, #29636, #29623, #29600, #29440, #29316, #29259, #29178, #29157, #29153, #29033, #28902, #28878, #28761, #28708, #28156, #29733, #29670, #29997, #28790, #29092, #29108, #29782, #25278 - Documentation for broadcasting CartesianIndices (#30230). - Documentation for Base.julia_cmd(). - Documentation for colon constructor of CartesianIndices (#29440). - Documentation for ^(::Matrix, ::Number) and ^(::Number, ::Matrix). - Run NEWS-update.jl. Co-authored-by: Morten Piibeleht <morten.piibeleht@gmail.com> Co-authored-by: Fredrik Ekre <ekrefredrik@gmail.com>
Addition of NEWS and compat admonitions for important changes between Julia 1.0 and 1.1, including: - Custom .css-style for compat admonitions. - Information about compat annotations to CONTRIBUTING.md. - NEWS.md entry for PRs #30090, #30035, #30022, #29978, #29969, #29858, #29845, #29754, #29638, #29636, #29615, #29600, #29506, #29469, #29316, #29259, #29178, #29153, #29033, #28902, #28761, #28745, #28708, #28696, #29997, #28790, #29092, #29108, #29782 - Compat annotation for PRs #30090, #30013, #29978, #29890, #29858, #29827, #29754, #29679, #29636, #29623, #29600, #29440, #29316, #29259, #29178, #29157, #29153, #29033, #28902, #28878, #28761, #28708, #28156, #29733, #29670, #29997, #28790, #29092, #29108, #29782, #25278 - Documentation for broadcasting CartesianIndices (#30230). - Documentation for Base.julia_cmd(). - Documentation for colon constructor of CartesianIndices (#29440). - Documentation for ^(::Matrix, ::Number) and ^(::Number, ::Matrix). - Run NEWS-update.jl. Co-authored-by: Morten Piibeleht <morten.piibeleht@gmail.com> Co-authored-by: Fredrik Ekre <ekrefredrik@gmail.com>
implements #29366