# What does the return keyword do in a let/begin block?

**URL:** <https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865>\
**Category:** Internals & Design\
**Tags:** question\
**Created:** [August 23, 2021, 5:58pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865 "2021-08-23T17:58:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![josePereiro](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/josepereiro/32/17322_2.png) [@josePereiro](https://discourse.julialang.org/u/josePereiro)\
**Post date:** [August 23, 2021, 5:58pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/1 "2021-08-23T17:58:18Z")

</div>

Hi, I couldn’t find in the [documentation](https://docs.julialang.org/en/v1/manual/variables-and-scoping/) an explanation to this behavior.

```julia
let
    "let block without return"
end |> println
# OUTPUT: let block without return

let
    return "let block with return"
end |> println
# OUTPUT: "let block with return"
# NOTE: the double quotes are actually printed

let
    "let block without return"
end |> typeof |> println
# OUTPUT: String

let
    return "let block with return"
end |> typeof |> println
# OUTPUT: "let block with return"
# NOTE: What is going on?

var1 = let
    "let block without return"
end
println("`var1` is assigned to: ", var1)
# OUTPUT: `var1` is assigned to: let block without return

var2 = let
    return "let block with return"
end
println("`var2` is assigned to: ", var2)
# OUTPUT: ERROR: LoadError: UndefVarError: var2 not defined[...]
# NOTE: What is going on?

```

A similar behaviour occurs with `begin` blocks.

I’m using `julia 1.6.1`

Thanks!

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [August 23, 2021, 6:29pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/2 "2021-08-23T18:29:55Z")

</div>

[https://github.com/JuliaLang/julia/issues/30499](https://github.com/JuliaLang/julia/issues/30499)

---

<div class="post-metadata">

**Author:** ![mzaffalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mzaffalon/32/214168_2.png) [@mzaffalon](https://discourse.julialang.org/u/mzaffalon)\
**Post date:** [November 14, 2021, 8:17pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/3 "2021-11-14T20:17:08Z")

</div>

What is the correct way of assigning to a variable in the context of the original question? Is an anonymous function the only way, for instance when I want to return from a for loop?

```julia
var1 = (() -> begin
    for_loop
        condition && return some_val
    end)()

```

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [November 14, 2021, 9:27pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/4 "2021-11-14T21:27:32Z")

</div>

Why not just the for loop itself?

```julia
julia> var1 = let x
           for i in 1:5
               (i == 4) && (x = i; break)
           end
           x
       end
4

```

---

<div class="post-metadata">

**Author:** ![mzaffalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mzaffalon/32/214168_2.png) [@mzaffalon](https://discourse.julialang.org/u/mzaffalon)\
**Post date:** [November 15, 2021, 7:11am UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/5 "2021-11-15T07:11:00Z")

</div>

Thank you. I was not aware that `let` could be used in this way.

---

<div class="post-metadata">

**Author:** ![mzaffalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mzaffalon/32/214168_2.png) [@mzaffalon](https://discourse.julialang.org/u/mzaffalon)\
**Post date:** [November 15, 2021, 8:18pm UTC](https://discourse.julialang.org/t/what-does-the-return-keyword-do-in-a-let-begin-block/66865/6 "2021-11-15T20:18:08Z")

</div>

I think this is worth to have in the docs: [https://github.com/JuliaLang/julia/pull/43094](https://github.com/JuliaLang/julia/pull/43094)
