# Access the name and value by using a symbol

**URL:** <https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523>\
**Category:** General Usage\
**Tags:** question\
**Created:** [July 20, 2018, 6:58am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523 "2018-07-20T06:58:40Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)\
**Post date:** [July 20, 2018, 6:58am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/1 "2018-07-20T06:58:40Z")

</div>

I wonder if it is possible to get the value and the name by using a symbol. I mean something like this (which does **not** work):

```julia
julia> x = 1
       y = :x 
       println("$y is equal to $(getvalue(y))") 
x is equal to 1

```

What I want is basically provide an array of symbols and store the `Pair(name, value)` as a dictionary (or named tuple).

Thanks

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [July 20, 2018, 7:10am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/2 "2018-07-20T07:10:56Z")

</div>

Is this what you are looking for?

```julia
println("y is equal to $(eval(y))")

```

---

<div class="post-metadata">

**Author:** ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)\
**Post date:** [July 20, 2018, 7:13am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/3 "2018-07-20T07:13:57Z")

</div>

> [@gdkrmr](#):
>
> println(“y is equal to $(eval(y))”)

It is very close, but is there a way to do in in local scope?

```julia
x = 1

function f()
	x = 2
	y = :x
	println("y is equal to $(eval(y))")
end

f()

```

prints: `y is equal to 1`

---

<div class="post-metadata">

**Author:** ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)\
**Post date:** [July 20, 2018, 7:20am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/4 "2018-07-20T07:20:52Z")

</div>

I’m pretty sure there is no way, and I’m also pretty sure that this is by design. In order to be able to compile functions, some restrictions need to be imposed on local scopes, such as no eval into the local scope of the function. I think this falls into the same category. Just just a dict.

---

<div class="post-metadata">

**Author:** ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)\
**Post date:** [July 20, 2018, 7:34am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/5 "2018-07-20T07:34:43Z")

</div>

Yeah, I actually thought it already but it was just i can I missed some concepts of meta-programming.

Thank you for replies.

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [July 20, 2018, 8:02am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/6 "2018-07-20T08:02:05Z")

</div>

The problem is that `eval` always executes in global scope (or a module), I am not sure if the following helps you:

```julia
macro p(s)
    @assert s.head == Symbol("=")
    y = string(s.args[1])
    _y = s.args[1]
    x = s.args[2].value
    quote
        $(esc(_y)) = $(esc(x))
        println($y, " is equal to ", $(esc(x)))
    end
end

function f()
    x = 2
    @p y = :x
    y
end
f()

```

Edit: Fixed bug in assignment of y

---

<div class="post-metadata">

**Author:** ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)\
**Post date:** [July 20, 2018, 8:18am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/7 "2018-07-20T08:18:42Z")

</div>

Ok, this is a possibility but I think I will overcome this issue by using other ideas in my code. Thanks anyway.

---

<div class="post-metadata">

**Author:** ![gdkrmr](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdkrmr/32/2791_2.png) [@gdkrmr](https://discourse.julialang.org/u/gdkrmr)\
**Post date:** [July 20, 2018, 8:40am UTC](https://discourse.julialang.org/t/access-the-name-and-value-by-using-a-symbol/12523/8 "2018-07-20T08:40:12Z")

</div>

I suggest you look at the `Cartesian` section in the manual for inspiration, e.g. `@nextract`:

[https://docs.julialang.org/en/stable/devdocs/cartesian/#Base.Cartesian.@nextract](https://docs.julialang.org/en/stable/devdocs/cartesian/#Base.Cartesian.@nextract)
