{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# 8-2 Proc#new以外のProcオブジェクトの作り方" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda_obj = lambda { 1 }" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Proc" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda_obj.class" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda_obj.call" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# 8-2-2 Kernel.#lambdaメソッド" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inc = ->(x) { x + 1 }" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inc.(1)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lo = lambda {|x| x + 1}" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "11" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lo.call(10)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# 8-3 Proc.new/Kernel.proc/Kernel.lambda" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":proc_return" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def proc_return\n", " Proc.new {return 1; puts :unreachable}.call\n", " :unreachable\n", "end" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proc_return" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "ename": "LocalJumpError", "evalue": "unexpected return", "output_type": "error", "traceback": [ "\u001b[31mLocalJumpError\u001b[0m: unexpected return", "\u001b[37m(pry):19:in `block in
'\u001b[0m", "\u001b[37m(pry):19:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "Proc.new {return 1; puts :unreachable}.call" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda { return 1; puts :unreachable}.call" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":reachable" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def lambda_return\n", " lambda {return 1; puts :unreachable}.call\n", " :reachable\n", "end\n", "\n", "lambda_return" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "ename": "LocalJumpError", "evalue": "break from proc-closure", "output_type": "error", "traceback": [ "\u001b[31mLocalJumpError\u001b[0m: break from proc-closure", "\u001b[37m(pry):27:in `block in
'\u001b[0m", "\u001b[37m(pry):27:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "Proc.new {break 1; puts :unreachable}.call" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "ename": "LocalJumpError", "evalue": "break from proc-closure", "output_type": "error", "traceback": [ "\u001b[31mLocalJumpError\u001b[0m: break from proc-closure", "\u001b[37m(pry):29:in `block in proc_break'\u001b[0m", "\u001b[37m(pry):29:in `proc_break'\u001b[0m", "\u001b[37m(pry):32:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "def proc_break\n", " Proc.new { break 1 ; puts :unreachable}.call\n", "end\n", "\n", "proc_break" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda { break 1; puts :unreachable }.call" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":reachable" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def lambda_break\n", " lambda {break 1; puts :unreachable}.call\n", " :reachable\n", "end\n", "\n", "lambda_break" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"1\"" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def wrap_method(proc_or_lambda)\n", " x = proc_or_lambda.call(1)\n", " x.to_s\n", "end\n", "\n", "wrap_method proc {|x| next x; x.succ}" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"1\"" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wrap_method lambda {|x| next x; x.succ }" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# 8-3-2 引数の違い" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Proc.new {|x, y| x}.call(1)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 1, expected 2)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 1, expected 2)", "\u001b[37m(pry):50:in `block in
'\u001b[0m", "\u001b[37m(pry):50:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "lambda {|x, y| x}.call(1)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "# 8-3-3 Proc#lambda?" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2]\n", "[1, nil]\n", "[1, 2]\n" ] } ], "source": [ "args_proc = Proc.new {|x, y| [x, y]}\n", "puts args_proc[1,2,3]\n", "puts args_proc[1]\n", "puts args_proc[[1,2]]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 3, expected 2)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 3, expected 2)", "\u001b[37m(pry):58:in `block in
'\u001b[0m", "\u001b[37m(pry):59:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "args_lambda = lambda {|x, y| [x, y]}\n", "puts args_lambda[1,2,3]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 1, expected 2)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 1, expected 2)", "\u001b[37m(pry):58:in `block in
'\u001b[0m", "\u001b[37m(pry):62:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "puts args_lambda[1]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 1, expected 2)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 1, expected 2)", "\u001b[37m(pry):58:in `block in
'\u001b[0m", "\u001b[37m(pry):63:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "puts args_lambda[[1,2]]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proc {}.lambda?" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda {}.lambda?" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1.method(:+).to_proc.lambda?" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 0, expected 1)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 0, expected 1)", "\u001b[37m(pry):68:in `+'\u001b[0m", "\u001b[37m(pry):68:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "1.method(:+).to_proc.call()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "ename": "ArgumentError", "evalue": "wrong number of arguments (given 2, expected 1)", "output_type": "error", "traceback": [ "\u001b[31mArgumentError\u001b[0m: wrong number of arguments (given 2, expected 1)", "\u001b[37m(pry):69:in `+'\u001b[0m", "\u001b[37m(pry):69:in `
'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/gems/iruby-0.3/bin/iruby:5:in `'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `load'\u001b[0m", "\u001b[37m/home/jovyan/.gem/ruby/2.6.0/bin/iruby:23:in `
'\u001b[0m" ] } ], "source": [ "1.method(:+).to_proc.call(2, 3)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# 8-4 Rubyでのクロージャ" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# 8-4-1 クロージャとしてのProcオブジェクトの動作" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":create_proc" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def create_proc\n", " str = 'from create_proc'\n", " Proc.new {str}\n", "end" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proc_obj = create_proc" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"from create_proc\"" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "str= 'from toplevel'\n", "proc_obj.call" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"from toplevel\"" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "str = 'from toplevel'\n", "top_level_proc = Proc.new {str}\n", "top_level_proc.call" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"from toplevelappend strings\"" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "str += 'append strings'\n", "top_level_proc.call" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "# 9章 Methodクラス" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "# 9-1 Methodオブジェクト" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "doubule = Proc.new {|x| x * 2}\n", "doubule.(1)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "array = [1,2,3,4,5]\n", "array_shift = array.method(:shift)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "array_shift.call" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2, 3, 4, 5]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "array" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Dog\n", " def bark\n", " puts 'wan!!'\n", " end\n", "end\n", "\n", "dog = Dog.new\n", "bark_wan = dog.method(:bark)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":bark" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Dog\n", " def bark\n", " puts 'bowwow!!'\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bowwow!!\n" ] } ], "source": [ "dog.bark" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wan!!\n" ] } ], "source": [ "bark_wan.call" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":bark" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def dog.bark\n", " puts 'kyankyan!!'\n", "end" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "kyankyan!!\n" ] } ], "source": [ "dog.bark" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wan!!\n" ] } ], "source": [ "bark_wan.call" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# 9-1-2 メソッドに関する引数の情報" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "nil\n" ] } ], "source": [ "class Rec\n", " def rec(i)\n", " p i\n", " return if i.nil?\n", " self.rec(nil)\n", " end\n", "end\n", "\n", "Rec.new.rec(3)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rec = Rec.new" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rec_method = rec.method(:rec)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "nil\n" ] } ], "source": [ "rec_method.call(3)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":rec" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Rec\n", " def rec(i)\n", " p \"override! #{i}\"\n", " return if i.nil?\n", " rec(nil)\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "\"override! \"\n" ] } ], "source": [ "rec_method.call(3) #再帰の場合はメソッドが書き換わってしまう!" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "# 9-1-2 メソッドに関する引数の情報" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":arity_keyword_2" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Arity\n", " def arity_0; end\n", " def arity_1(x); end\n", " def arity_2(x, y); end\n", " \n", " def arity_variable_length(*x); end\n", " def arity_variable_length_with_default_arg(x, *y); end\n", " def arity_default_val_1(x = 1); end\n", " def arity_default_val_2(x, y = 1); end\n", " \n", " def arity_keyword_2(x:, y:); end\n", "end" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "-1\n", "-2\n", "-1\n", "-2\n", "1\n" ] } ], "source": [ "arity_obj = Arity.new\n", "puts arity_obj.method(:arity_0).arity\n", "puts arity_obj.method(:arity_1).arity\n", "puts arity_obj.method(:arity_2).arity\n", "puts arity_obj.method(:arity_variable_length).arity\n", "puts arity_obj.method(:arity_variable_length_with_default_arg).arity\n", "puts arity_obj.method(:arity_default_val_1).arity\n", "puts arity_obj.method(:arity_default_val_2).arity\n", "puts arity_obj.method(:arity_keyword_2).arity" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":arity1_and_block_arg" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class MethodParameter\n", " def arity0; end\n", " def arity1(x); end\n", " def arity1_and_default_val(x = 1); end\n", " def arity1_and_valiable_arg(x, *y); end\n", " def arity1_and_block_arg(x, &y); end\n", "end" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "[[:req, :x]]\n", "[[:opt, :x]]\n", "[[:req, :x], [:rest, :y]]\n", "[[:req, :x], [:block, :y]]\n" ] } ], "source": [ "method_params = MethodParameter.new\n", "puts method_params.method(:arity0).parameters\n", "puts method_params.method(:arity1).parameters\n", "puts method_params.method(:arity1_and_default_val).parameters\n", "puts method_params.method(:arity1_and_valiable_arg).parameters\n", "puts method_params.method(:arity1_and_block_arg).parameters" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[[:rest]]" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "puts_method = Kernel.method(:puts)\n", "puts_method.parameters" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":method_missing" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class KeywordArgs\n", " def normal_method_allow_keyword_args(first_arg, second_arg, third_arg)\n", " [first_arg, second_arg, third_arg]\n", " end\n", " \n", " private\n", " \n", " def method_missing(name, *args)\n", " method_name = name.to_s + '_allow_keyword_args'\n", " super unless respond_to? method_name\n", " args_hash = args.first\n", " \n", " new_args = self.method(method_name).parameters.map do |(req, arg_name)|\n", " args_hash[arg_name]\n", " end\n", " \n", " __send__ method_name, *new_args\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2, 3, 1]" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "KeywordArgs.new.normal_method(third_arg: 1, first_arg: 2, second_arg: 3)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "# 9-1-3 メソッドの持ち主/名前/レシーバ" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MethodInfo" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class MethodInfo\n", " def sample_method; end\n", "end\n", "\n", "obj = MethodInfo.new\n", "sample_method = obj.method(:sample_method)\n", "sample_method.owner" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":sample_method" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_method.name" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_method.receiver" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_method.receiver == obj" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [], "source": [ "# 9-1-4 メソッドがオーバーライドしたメソッド" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":hello" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class OriginalClass\n", " def hello\n", " 'hello'\n", " end\n", "end\n", "\n", "class OverrideClass < OriginalClass\n", " def hello\n", " 'hello hello'\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#\n", "OverrideClass\n", "hello hello\n", "#\n", "OriginalClass\n", "hello\n" ] } ], "source": [ "hello_method = OverrideClass.new.method(:hello)\n", "puts hello_method\n", "puts hello_method.owner\n", "puts hello_method.call\n", "puts hello_method.super_method\n", "puts hello_method.super_method.owner\n", "puts hello_method.super_method.call" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n" ] } ], "source": [ "p OriginalClass.new.method(:hello).super_method" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.6.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }