# Quoting numbers vs quoting names

**URL:** <https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958>\
**Category:** General Usage\
**Tags:** metaprogramming\
**Created:** [June 26, 2018, 9:15am UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958 "2018-06-26T09:15:01Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Robert\_Honig](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/robert_honig/32/4930_2.png) [@Robert\_Honig](https://discourse.julialang.org/u/Robert_Honig)\
**Post date:** [June 26, 2018, 9:15am UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/1 "2018-06-26T09:15:01Z")

</div>

```julia
julia> Meta.parse(":1")
:($(QuoteNode(1)))

julia> Meta.parse(":a")
:(:a)

```

Quoting the name `a` gives me what I expect: The symbol `:a`. Quoting the number `1`, however, resolves to `$(QuoteNode(1))`, which is **not** what I expect. I expect `:1` to resolve to the symbol `:1`, and not to a QuoteNode that gets immediately interpolated.

There surely is a reason for this behavior, but I cannot find anything in the [Metaprogramming docs](https://docs.julialang.org/en/latest/manual/metaprogramming/).

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [June 26, 2018, 9:19am UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/2 "2018-06-26T09:19:58Z")

</div>

It’s just printed more compactly.

```julia
julia> dump(Meta.parse(":a"))
QuoteNode
  value: Symbol a

julia> dump(Meta.parse(":1"))
QuoteNode
  value: Int64 1

```

---

<div class="post-metadata">

**Author:** ![Robert\_Honig](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/robert_honig/32/4930_2.png) [@Robert\_Honig](https://discourse.julialang.org/u/Robert_Honig)\
**Post date:** [June 26, 2018, 9:27am UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/3 "2018-06-26T09:27:10Z")

</div>

```julia
julia> dump(Meta.parse(":a"))
QuoteNode
  value: Symbol a

julia> dump(Meta.parse(":1"))
QuoteNode
  value: Int64 1

```

For this output, my question would be why `dump(Meta.parse(":1"))` gives `value: Int64 1` instead of `value: Symbol 1`

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [June 26, 2018, 9:38am UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/4 "2018-06-26T09:38:15Z")

</div>

Perhaps these examples are useful:

```julia
julia> foo = 3
3

julia> @eval $(:foo)
3

julia> @eval $(:1)
1

julia> @eval $(Symbol("1")) = 2
2

julia> @eval $(:1)
1

julia> @eval $(Symbol("1"))
2

julia> varinfo()
name size summary           
–––––––––––––––– ––––––––––– ––––––––––––––––––
1 8 bytes Int64               
foo 8 bytes Int64      

```

---

<div class="post-metadata">

**Author:** ![NiclasMattsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/niclasmattsson/32/21988_2.png) [@NiclasMattsson](https://discourse.julialang.org/u/NiclasMattsson)\
**Post date:** [June 26, 2018, 3:01pm UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/5 "2018-06-26T15:01:56Z")

</div>

Whoa - did you just make a global variable called `1` and assign it a value `2`? Kinky. 🙂

Does this mean that the [rules for variable naming](https://docs.julialang.org/en/stable/manual/variables/#Allowed-Variable-Names-1) are only enforced on the parser level? I assume that `@eval` trick only works in the global namespace, so is there another tricky way of defining local variables with relaxed naming rules?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [June 26, 2018, 3:13pm UTC](https://discourse.julialang.org/t/quoting-numbers-vs-quoting-names/11958/6 "2018-06-26T15:13:15Z")

</div>

> [@NiclasMattsson](#):
>
> is there another tricky way of defining local variables with relaxed naming rules?

```julia
macro withone(body)
    o = esc(Symbol("1"))
    quote
        let $(o) = 2
            $(esc(body)) + $(o)
        end
    end
end

@withone sin(1) # == sin(1) + 2

```
