# Eval/quote symbol

**URL:** <https://discourse.julialang.org/t/eval-quote-symbol/63175>\
**Category:** New to Julia\
**Created:** [June 19, 2021, 8:06am UTC](https://discourse.julialang.org/t/eval-quote-symbol/63175 "2021-06-19T08:06:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [June 19, 2021, 8:06am UTC](https://discourse.julialang.org/t/eval-quote-symbol/63175/1 "2021-06-19T08:06:24Z")

</div>

Why doesn’t this work on symbols, and how can I fix it?

```julia
function q(x)
    quote y = $x end
end

function f(x)
    eval(q(x))
    y
end

f(5) == 5 # ok
f(:baz) == :baz # error

```

---

<div class="post-metadata">

**Author:** ![melonedo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/melonedo/32/15503_2.png) [@melonedo](https://discourse.julialang.org/u/melonedo)\
**Post date:** [June 19, 2021, 9:28am UTC](https://discourse.julialang.org/t/eval-quote-symbol/63175/2 "2021-06-19T09:28:42Z")

</div>

I am not sure what you want for a “symbol”.

First, `eval` only works on top level, so only global variables are reachable. f(1) will assign 1 to global variable `y`.

```julia
y = 0
f(1)
println(y) # => 1

```

If you want `eval` to work on literal symbols, `Meta.quot` is needed.

```julia
function q(x)
    quote y = $(Meta.quot(x)) end
end
```
