# Alias for a macro

**URL:** <https://discourse.julialang.org/t/alias-for-a-macro/6615>\
**Category:** New to Julia\
**Created:** [October 22, 2017, 7:27pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615 "2017-10-22T19:27:37Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [October 22, 2017, 7:27pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/1 "2017-10-22T19:27:37Z")

</div>

How can I alias a macro?  
I would like to use `@dot` instead of `@.`.

---

<div class="post-metadata">

**Author:** ![jw3126](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jw3126/32/3086_2.png) [@jw3126](https://discourse.julialang.org/u/jw3126)\
**Post date:** [October 22, 2017, 7:39pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/2 "2017-10-22T19:39:12Z")

</div>

You could do

```julia
macro dot(expr)
    :(@. $expr))
end

```

There is also the predefined alias `@ __dot__ `.

---

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [October 22, 2017, 7:44pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/3 "2017-10-22T19:44:04Z")

</div>

Thanks!

---

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [October 22, 2017, 8:14pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/4 "2017-10-22T20:14:16Z")

</div>

Oops.  
`@.` seems to be more elaborate than the above definition of `@dot`.  
It also works for in-place assignments for which `@dot` gives an error:

```julia
x = [0,1,2]
y = zeros(3)
@dot y = exp(x)

```

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [October 22, 2017, 8:15pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/5 "2017-10-22T20:15:52Z")

</div>

You need to use `esc` correctly.

---

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [October 22, 2017, 8:30pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/6 "2017-10-22T20:30:39Z")

</div>

```julia
macro dot(expr)
    esc(:(@. $expr))
end

```

1. Is this correct?
2. Is this the simplest way to alias a macro?

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [October 22, 2017, 8:48pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/7 "2017-10-22T20:48:06Z")

</div>

No. On 0.6 the correct and preferred way is `:(@. $(esc(expr)))`, i.e. you must escape each input once and exactly once. On master this is broken so the only way you can do this is `esc(:($Base.@. $(esc(expr))))`

You can also just do `@eval const $(Symbol("@dot") = $(Symbol("@ __dot__")))`

---

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [October 22, 2017, 8:55pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/8 "2017-10-22T20:55:02Z")

</div>

Thank you very much for the detailed explanation.

There was a small typo in parenthesizing, but the last version also works:  
`@eval const $(Symbol("@dot")) = $(Symbol("@ __dot__"))`

---

<div class="post-metadata">

**Author:** ![Shuhua](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/shuhua/32/27618_2.png) [@Shuhua](https://discourse.julialang.org/u/Shuhua)\
**Post date:** [July 24, 2020, 5:39am UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/9 "2020-07-24T05:39:51Z")

</div>

Despite this old thread, perhaps it deserves to mention that a more convenient way is to use the `var"name"` syntax introduced in Julia 1.3.

```julia
julia> var"@myassert" = var"@assert";
julia> @myassert 1 + 1 == 3 "wrong equation"
ERROR: AssertionError: wrong equation

```

See [here](https://discourse.julialang.org/t/string-as-a-variable-name/2195/21) and [this Stackoverflow](https://stackoverflow.com/questions/50084877/how-to-alias-a-macro-in-julia) for details.

---

<div class="post-metadata">

**Author:** ![turtle](https://avatars.discourse-cdn.com/v4/letter/t/ecb155/32.png) [@turtle](https://discourse.julialang.org/u/turtle)\
**Post date:** [July 24, 2020, 10:54am UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/10 "2020-07-24T10:54:19Z")

</div>

Thank you for sharing this useful info!

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [July 24, 2020, 1:27pm UTC](https://discourse.julialang.org/t/alias-for-a-macro/6615/11 "2020-07-24T13:27:31Z")

</div>

> [@Shuhua](#):
>
> `var"@myassert" = var"@assert"`

`const var"@myassert" = var"@assert"`
