IEx.Helpers.v/1 で直前に実行した値を取り出そう(Elixir)

# はじめに
- [Elixir](https://elixir-lang.org/) 楽しんでいますか :bangbang::bangbang::bangbang:
- [Elixir](https://elixir-lang.org/)を楽しんでいる(インスール済)の方に向けて書いています
- `IEx(Elixir's interactive shell)`でなにかを試しているときに
- <font color="purple">「あ〜　直前の実行結果を変数に束縛しておけばよかった」</font>
- とおもうことありませんか:interrobang:
- ありますですよね:bangbang:

# 結論
- [IEx.Helpers.v/1](https://hexdocs.pm/iex/IEx.Helpers.html#v/1)を使うとよいです

## Examples

```elixir
iex(1)> "hello" <> " world"
"hello world"
iex(2)> 40 + 2
42
iex(3)> v(-2)
"hello world"
iex(4)> v(2)
42
iex(5)> v()
42
```

# あ〜　直前の実行結果を変数に束縛しておけばよかった の様子

- (アニメーションGIFがなぜかうまく上がらないのでテキストで書いちょきます)

```elixir

$ iex -S mix

iex> HTTPoison.get("https://qiita.com/api/v2/items/c686397e4a0f4f11683d")
{:ok,
 %HTTPoison.Response{
   body: "{\"rendered_body\":\"\\u003cp\\u003eMarkdown記法のチートシートです。\\u003cbr\\u003e\\n本ページではQiitaで使用可能なMarkdownのみ掲載しているため、一部原文と異なります。\\u003cbr\\u003e\\nMarkdownの原文については、\\u003ca href=\\\"http://daringfireball.net/projects/markdown/syntax.php\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eDaring Fireball: Markdown Syntax Documentation\\u003c/a\\u003eをご覧下さい。\\u003cbr\\u003e\\nまた、コードに関する記法は\\u003ca href=\\\"https://github.github.com/gfm/\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eGitHub Flavored Markdown\\u003c/a\\u003eに準拠しています。\\u003cbr\\u003e\\nQiitaでシンタックスハイライト可能な言語一覧については、 \\u003ca href=\\\"http://qiita.com/Qiita/items/e84f5aad7757afce82ba\\\" id=\\\"reference-d0063d1590f9c8d86c05\\\"\\u003eシンタックスハイライト可能な言語\\u003c/a\\u003e をご覧下さい。\\u003c/p\\u003e\\n\\n\\u003ch2\\u003e\\n\\u003cspan id=\\\"code---コードの挿入\\\" class=\\\"fragment\\\"\\u003e\\u003c/span\\u003e\\u003ca href=\\\"#code---%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%8C%BF%E5%85%A5\\\"\\u003e\\u003ci class=\\\"fa fa-link\\\"\\u003e\\u003c/i\\u003e\\u003c/a\\u003eCode - コードの挿入\\u003c/h2\\u003e\\n\\n\\u003cp\\u003eたとえば、Rubyで記述したコードをファイル名「qiita.rb」として投稿したいときは、 \\u003cstrong\\u003eバッククオート\\u003c/strong\\u003e を使用して以下のように投稿するとシンタックスハイライトが適用されます。 \\u003cbr\\u003e\\n\\u003cstrong\\u003eコードブロック上下に空行を挿入しないと正しく表示されないことがあります。\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e(空行)\\u003cbr\\u003e\\n```ruby:qiita.rb\\u003cbr\\u003e\\nputs 'The best way to log and share programmers knowledge.'\\u003cbr\\u003e\\n```\\u003cbr\\u003e\\n(空行)\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cdiv class=\\\"code-frame\\\" data-lang=\\\"ruby\\\"\\u003e\\n\\u003cdiv class=\\\"code-lang\\\"\\u003e\\u003cspan class=\\\"bold\\\"\\u003eqiita.rb\\u003c/span\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"highlight\\\"\\u003e\\u003cpre\\u003e\\u003cspan class=\\\"nb\\\"\\u003eputs\\u003c/span\\u003e \\u003cspan class=\\\"s1\\\"\\u003e'The best way to log and share programmers knowledge.'\\u003c/span\\u003e\\n\\u003c/pre\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\\u003cp\\u003e現状では、ファイル名部分には半角スペースを直接使うことができません。\\u003cbr\\u003e\\n全角スペースか、\\u003ccode\\u003e\\u0026amp;#x20;\\u003c/code\\u003e のようなHTML文字参照で代用できます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e```ruby:qiita\\u0026amp;#x20;motto.rb　(2)\\u003cbr\\u003e\\nputs 'The best way to log and share programmers knowledge.'\\u003cbr\\u003e\\n```\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cdiv class=\\\"code-frame\\\" data-lang=\\\"ruby\\\"\\u003e\\n\\u003cdiv class=\\\"code-lang\\\"\\u003e\\u003cspan class=\\\"bold\\\"\\u003eqiita motto.rb　(2)\\u003c/span\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"highlight\\\"\\u003e\\u003cpre\\u003e\\u003cspan class=\\\"nb\\\"\\u003eputs\\u003c/span\\u003e \\u003cspan class=\\\"s1\\\"\\u003e'The best way to log and share programmers knowledge.'\\u003c/span\\u003e\\n\\u003c/pre\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\\u003cp\\u003eまた、コードをインライン表示することも可能です。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e` puts 'Qiita'` はプログラマのための技術情報共有サービスです。\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cp\\u003e\\u003ccode\\u003eputs 'Qiita'\\u003c/code\\u003e はプログラマのための技術情報共有サービスです。\\u003c/p\\u003e\\n\\n\\u003cp\\u003eインラインコードがn個連続するバッククオートを含む場合、n+1連続のバッククオートで囲みます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e`` `バッククオート` `` や ``` ``2連続バッククオート`` ``` も記述できます。\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cp\\u003e\\u003ccode\\u003e`バッククオート`\\u003c/code\\u003e や \\u003ccode\\u003e``2連続バッククオート``\\u003c/code\\u003e も記述できます。\\u003c/p\\u003e\\n\\n\\u003cp\\u003eインラインコードの中身が \\u003ca href=\\\"https://developer.mozilla.org/ja/docs/Web/CSS/color_value\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eCSS の \\u003ccode\\u003e\\u0026lt;color\\u0026gt;\\u003c/code\\u003e 型\\u003c/a\\u003eの RGB 16進数表記, \\u003ccode\\u003ergb()\\u003c/code\\u003e, \\u003ccode\\u003ergba()\\u003c/code\\u003e, \\u003ccode\\u003ehsl()\\u003c/code\\u003e, \\u003ccode\\u003ehsla()\\u003c/code\\u003e 場合横にその色が表示されます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e`#ffce44`\\u003cbr\\u003e\\n`rgb(255,0," <> ...,
   headers: [
     {"Date", "Mon, 04 Jan 2021 13:01:49 GMT"},
     {"Content-Type", "application/json; charset=utf-8"},
     {"Transfer-Encoding", "chunked"},
     {"Connection", "keep-alive"},
     {"Server", "nginx"},
     {"X-Frame-Options", "SAMEORIGIN"},
     {"X-XSS-Protection", "1; mode=block"},
     {"X-Content-Type-Options", "nosniff"},
     {"X-Download-Options", "noopen"},
     {"X-Permitted-Cross-Domain-Policies", "none"},
     {"Referrer-Policy", "strict-origin-when-cross-origin"},
     {"ETag", "W/\"3494e5aae647703659869cd49050996d\""},
     {"Cache-Control", "max-age=0, private, must-revalidate"},
     {"Rate-Limit", "60"},
     {"Rate-Remaining", "54"},
     {"Rate-Reset", "1609766181"},
     {"Vary", "Origin"},
     {"X-Runtime", "0.136990"},
     {"Strict-Transport-Security", "max-age=2592000"},
     {"X-Request-Id", "be74e709-90a5-4d16-b321-7454a284b21c"}
   ],
   request: %HTTPoison.Request{
     body: "",
     headers: [],
     method: :get,
     options: [],
     params: %{},
     url: "https://qiita.com/api/v2/items/c686397e4a0f4f11683d"
   },
   request_url: "https://qiita.com/api/v2/items/c686397e4a0f4f11683d",
   status_code: 200
 }}
```

- <font color="purple">$\huge{「あ〜　実行結果を変数に束縛しておけばよかった」}$</font>
- 大丈夫`v`
- <font color="purple">$\huge{だいじょうv}$</font>

```elixir
iex> {:ok, res} = v
{:ok,
 %HTTPoison.Response{
   body: "{\"rendered_body\":\"\\u003cp\\u003eMarkdown記法のチートシートです。\\u003cbr\\u003e\\n本ページではQiitaで使用可能なMarkdownのみ掲載しているため、一部原文と異なります。\\u003cbr\\u003e\\nMarkdownの原文については、\\u003ca href=\\\"http://daringfireball.net/projects/markdown/syntax.php\\\" rel=\\\"nofollow noopener\\\" tar ...
}
```

```elixir
iex> Map.get(res, :body)       
"{\"rendered_body\":\"\\u003cp\\u003eMarkdown記法のチートシートです。\\u003cbr\\u003e\\n本ページではQiitaで使用可能なMarkdownのみ掲載しているため、一部原文と異なります。\\u003cbr\\u003e\\nMarkdownの原文については、\\u003ca href=\\\"http://daringfireball.net/projects/markdown/syntax.php\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eDaring Fireball: Markdown Syntax Documentation\\u003c/a\\u003eをご覧下さい。\\u003cbr\\u003e\\nまた、コードに関する記法は\\u003ca href=\\\"https://github.github.com/gfm/\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eGitHub Flavored Markdown\\u003c/a\\u003eに準拠しています。\\u003cbr\\u003e\\nQiitaでシンタックスハイライト可能な言語一覧については、 \\u003ca href=\\\"http://qiita.com/Qiita/items/e84f5aad7757afce82ba\\\" id=\\\"reference-d0063d1590f9c8d86c05\\\"\\u003eシンタックスハイライト可能な言語\\u003c/a\\u003e をご覧下さい。\\u003c/p\\u003e\\n\\n\\u003ch2\\u003e\\n\\u003cspan id=\\\"code---コードの挿入\\\" class=\\\"fragment\\\"\\u003e\\u003c/span\\u003e\\u003ca href=\\\"#code---%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%8C%BF%E5%85%A5\\\"\\u003e\\u003ci class=\\\"fa fa-link\\\"\\u003e\\u003c/i\\u003e\\u003c/a\\u003eCode - コードの挿入\\u003c/h2\\u003e\\n\\n\\u003cp\\u003eたとえば、Rubyで記述したコードをファイル名「qiita.rb」として投稿したいときは、 \\u003cstrong\\u003eバッククオート\\u003c/strong\\u003e を使用して以下のように投稿するとシンタックスハイライトが適用されます。 \\u003cbr\\u003e\\n\\u003cstrong\\u003eコードブロック上下に空行を挿入しないと正しく表示されないことがあります。\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e(空行)\\u003cbr\\u003e\\n```ruby:qiita.rb\\u003cbr\\u003e\\nputs 'The best way to log and share programmers knowledge.'\\u003cbr\\u003e\\n```\\u003cbr\\u003e\\n(空行)\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cdiv class=\\\"code-frame\\\" data-lang=\\\"ruby\\\"\\u003e\\n\\u003cdiv class=\\\"code-lang\\\"\\u003e\\u003cspan class=\\\"bold\\\"\\u003eqiita.rb\\u003c/span\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"highlight\\\"\\u003e\\u003cpre\\u003e\\u003cspan class=\\\"nb\\\"\\u003eputs\\u003c/span\\u003e \\u003cspan class=\\\"s1\\\"\\u003e'The best way to log and share programmers knowledge.'\\u003c/span\\u003e\\n\\u003c/pre\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\\u003cp\\u003e現状では、ファイル名部分には半角スペースを直接使うことができません。\\u003cbr\\u003e\\n全角スペースか、\\u003ccode\\u003e\\u0026amp;#x20;\\u003c/code\\u003e のようなHTML文字参照で代用できます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e```ruby:qiita\\u0026amp;#x20;motto.rb　(2)\\u003cbr\\u003e\\nputs 'The best way to log and share programmers knowledge.'\\u003cbr\\u003e\\n```\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cdiv class=\\\"code-frame\\\" data-lang=\\\"ruby\\\"\\u003e\\n\\u003cdiv class=\\\"code-lang\\\"\\u003e\\u003cspan class=\\\"bold\\\"\\u003eqiita motto.rb　(2)\\u003c/span\\u003e\\u003c/div\\u003e\\n\\u003cdiv class=\\\"highlight\\\"\\u003e\\u003cpre\\u003e\\u003cspan class=\\\"nb\\\"\\u003eputs\\u003c/span\\u003e \\u003cspan class=\\\"s1\\\"\\u003e'The best way to log and share programmers knowledge.'\\u003c/span\\u003e\\n\\u003c/pre\\u003e\\u003c/div\\u003e\\n\\u003c/div\\u003e\\n\\n\\u003cp\\u003eまた、コードをインライン表示することも可能です。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e` puts 'Qiita'` はプログラマのための技術情報共有サービスです。\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cp\\u003e\\u003ccode\\u003eputs 'Qiita'\\u003c/code\\u003e はプログラマのための技術情報共有サービスです。\\u003c/p\\u003e\\n\\n\\u003cp\\u003eインラインコードがn個連続するバッククオートを含む場合、n+1連続のバッククオートで囲みます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e`` `バッククオート` `` や ``` ``2連続バッククオート`` ``` も記述できます。\\u003c/p\\u003e\\n\\u003c/blockquote\\u003e\\n\\n\\u003cp\\u003e\\u003cstrong\\u003e結果\\u003c/strong\\u003e\\u003c/p\\u003e\\n\\n\\u003cp\\u003e\\u003ccode\\u003e`バッククオート`\\u003c/code\\u003e や \\u003ccode\\u003e``2連続バッククオート``\\u003c/code\\u003e も記述できます。\\u003c/p\\u003e\\n\\n\\u003cp\\u003eインラインコードの中身が \\u003ca href=\\\"https://developer.mozilla.org/ja/docs/Web/CSS/color_value\\\" rel=\\\"nofollow noopener\\\" target=\\\"_blank\\\"\\u003eCSS の \\u003ccode\\u003e\\u0026lt;color\\u0026gt;\\u003c/code\\u003e 型\\u003c/a\\u003eの RGB 16進数表記, \\u003ccode\\u003ergb()\\u003c/code\\u003e, \\u003ccode\\u003ergba()\\u003c/code\\u003e, \\u003ccode\\u003ehsl()\\u003c/code\\u003e, \\u003ccode\\u003ehsla()\\u003c/code\\u003e 場合横にその色が表示されます。\\u003c/p\\u003e\\n\\n\\u003cblockquote\\u003e\\n\\u003cp\\u003e`#ffce44`\\u003cbr\\u003e\\n`rgb(255,0," <> ...
```


# おまけ

```elixir
iex> h v/1

                                 def v(n \\ -1)                                 

Returns the value of the nth expression in the history.

n can be a negative value: if it is, the corresponding expression value
relative to the current one is returned. For example, v(-2) returns the value
of the expression evaluated before the last evaluated expression. In
particular, v(-1) returns the result of the last evaluated expression and v()
does the same.

## Examples

    iex(1)> "hello" <> " world"
    "hello world"
    iex(2)> 40 + 2
    42
    iex(3)> v(-2)
    "hello world"
    iex(4)> v(2)
    42
    iex(5)> v()
    42
```

- `h`に聞いても`v/1`がどのモジュールにあるのかはじめはわかりませんでした

```elixir
iex> &v/1
&IEx.Helpers.v/1
```

- [Function capturing](https://elixir-lang.org/getting-started/modules-and-functions.html#function-capturing)してみたら、わかったですよ
- ありがとナイス:flag_cn:

# 参考
- [IEx Last Return](https://til.hashrocket.com/posts/gjsszlrbjq-iex-last-return)
- [iexを便利にするハック集](https://qiita.com/Tsuyoshi84/items/b54c9e9fc4f1b5f9e672) -- @Tsuyoshi84 さん


# Wrapping Up 🎍🎍🎍🎍🎍
- `v`をうまく使いましょう
- Enjoy [Elixir](https://elixir-lang.org/) :bangbang::bangbang::bangbang: