はじめに
- Elixir 楽しんでいますか
- Elixirを楽しんでいる(インスール済)の方に向けて書いています
-
IEx(Elixir's interactive shell)
でなにかを試しているときに - 「あ〜 直前の実行結果を変数に束縛しておけばよかった」
- とおもうことありませんか
- ありますですよね
結論
- IEx.Helpers.v/1を使うとよいです
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
あ〜 直前の実行結果を変数に束縛しておけばよかった の様子
- (アニメーションGIFがなぜかうまく上がらないのでテキストで書いちょきます)
$ 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
}}
- $\huge{「あ〜 実行結果を変数に束縛しておけばよかった」}$
- 大丈夫
v
- $\huge{だいじょうv}$
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 ...
}
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," <> ...
おまけ
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
がどのモジュールにあるのかはじめはわかりませんでした
iex> &v/1
&IEx.Helpers.v/1
- Function capturingしてみたら、わかったですよ
- ありがとナイス
参考
Wrapping Up 🎍🎍🎍🎍🎍
-
v
をうまく使いましょう - Enjoy Elixir