# Getting name from "name"

**URL:** <https://discourse.julialang.org/t/getting-name-from-name/66893>\
**Category:** New to Julia\
**Tags:** metaprogramming\
**Created:** [August 24, 2021, 4:47am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893 "2021-08-24T04:47:31Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 4:47am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/1 "2021-08-24T04:47:31Z")

</div>

Is there a way in Julia to parse “name” into name?

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 4:49am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/2 "2021-08-24T04:49:57Z")

</div>

I can use a Dict, but I don’t want to define every possible name in advance.

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [August 24, 2021, 4:55am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/3 "2021-08-24T04:55:31Z")

</div>

What are you trying to do/avoid? This is usually an indication you could structure your code better.

There are lots of caveats with this approach, but:

```nohighlight
julia> x = "Hello. World!"
"Hello. World!"

julia> y = "x"
"x"

julia> getfield(@ __MODULE__ , Symbol(y))
"Hello. World!"

julia> eval(Symbol(y))
"Hello. World!"

```

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 5:36am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/4 "2021-08-24T05:36:57Z")

</div>

I’m simply trying to fetch the contents of a string. No ulterior motive involved.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:05am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/5 "2021-08-24T06:05:45Z")

</div>

It’d be simple is parse(string,Any) worked, but it doesn’t.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:07am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/6 "2021-08-24T06:07:36Z")

</div>

Both of these examples return strings, not the contents of the string.

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [August 24, 2021, 6:10am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/7 "2021-08-24T06:10:44Z")

</div>

Do you mean this?

```nohighlight
julia> eval(Meta.parse("1 + 1"))
2

```

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [August 24, 2021, 6:25am UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/8 "2021-08-24T06:25:50Z")

</div>

What do you mean by that? A string is a string, the only thing close to its contents are the characters making up that string.

Are you talking about referencing a variable based on a string? As indicated by @odow, this usually signifies a problem in your approach, if you can tell us a little bit more about what you’re trying to do we can probably suggest an alternative that’ll work better for your usecase.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:34pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/9 "2021-08-24T18:34:32Z")

</div>

No, I want to get 1+1 from “1=1”.

I gather the answer to my question is NO.

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [August 24, 2021, 6:37pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/10 "2021-08-24T18:37:10Z")

</div>

I’m afraid I don’t follow - what exactly are you referring to when you say that you want to get `1+1` from `"1+1"`? Are you referring to the _expression_ `1+1`? You can get that by doing `Meta.parse("1+1")`, though I doubt that will get you farther with your original goal, whatever that may be.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:44pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/11 "2021-08-24T18:44:36Z")

</div>

Meta.pars(“name”) yields :name — which may be useful. Thanks!

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [August 24, 2021, 6:47pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/12 "2021-08-24T18:47:01Z")

</div>

Again - what would you like to do with that? It very much seems like you’re trying to access some variable by a string, in which case a `Dict` is more appropriate than trying to get real declared variable values from a string. At the time the code runs, _the variable name doesn’t exist anymore_, as it’s compiled away.

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [August 24, 2021, 6:50pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/13 "2021-08-24T18:50:25Z")

</div>

What do you mean by `1+1`? Do you want that to be evaluated or do you want an expression that can be evaluated?

odow’s answer was the solution for both of those things. `Meta.parse` gives you the expression `:(1 + 1)`, which can be evaluated using `eval`.

`Meta.parse("name")` will give you `:name` sure, but that’s just a symbol, and isn’t attached to any variable. Using `eval` on that symbol will be in the _global scope_, which is typically not what you want.

But it’s important to know why you want to do this, because it’s typically a pretty bad idea.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:55pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/14 "2021-08-24T18:55:50Z")

</div>

As I said in in earlier post, using Dict requires me to name all potential names in advance.  
I don’t want to do that, as it prevents using new names at run-time.  
Thanks again for your replies.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 6:59pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/15 "2021-08-24T18:59:44Z")

</div>

I’m implementing a new language in Julia, for which I need the ability to extract the contents of a string.

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [August 24, 2021, 7:02pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/16 "2021-08-24T19:02:23Z")

</div>

Ok, but using `Meta.parse` will use the julia parser and thus you’ll be limited to julia expressions. Implementing your own language would require writing your own parser, which would be distinct from the julia parser.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 7:27pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/17 "2021-08-24T19:27:28Z")

</div>

Where do I find info on writing my own parser?

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [August 24, 2021, 7:53pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/18 "2021-08-24T19:53:21Z")

</div>

That sounds like fun! But note once again that `eval` will be in the _global scope_ (you can do some tricky things to get around this by defining functions, but I’m not experienced with them), so it is really not recommended for a lot of things, and can often have really subpar performance. Others will have a better idea of what to do here.

E: In the end you may have to use eval in some fashion once you’ve parsed your new language, but that’s something to figure out later.

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [August 24, 2021, 7:59pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/19 "2021-08-24T19:59:47Z")

</div>

Since it seems like this is a new field for you, I’ll recommend a basic introduction:

[![](https://global.discourse-cdn.com/julialang/original/3X/b/3/b3323cbca317fb7ba712ed7e2700a20faf808615.jpeg "Parsing Explained - Computerphile") ](https://www.youtube.com/watch?v=bxpc9Pp5pZM)

as well as an introduction to bottom up parsing:

[![](https://global.discourse-cdn.com/julialang/original/3X/3/0/30d3d5e61118f47d0dcf49703d3a39e6bef85d22.jpeg "Parsing Bottom Up - Computerphile") ](https://www.youtube.com/watch?v=tH5AOX9929g)

Be aware though, this is a larger topic than you may think. There are quite a few more introductions and tutorials on how to write a parser/compiler, but those two are good starting points for finding out what a parser is, as well as how you could do that.

* * *

> [@rayegun](#):
>
> In the end you may have to use eval in some fashion.

Be aware that OP is _not_ asking about parsing julia code. `eval` and `Meta.parse` will NOT be of help here. They’re trying to create their own programming language. Please don’t confuse the two.

---

<div class="post-metadata">

**Author:** ![dgpdx](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@dgpdx](https://discourse.julialang.org/u/dgpdx)\
**Post date:** [August 24, 2021, 8:06pm UTC](https://discourse.julialang.org/t/getting-name-from-name/66893/20 "2021-08-24T20:06:41Z")

</div>

Thanks again for your help! I watch those videos now.

[Next page](https://discourse.julialang.org/t/getting-name-from-name/66893.md?page=2)
