{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### 10-2-6 クラスやモジュールからインスタンスメソッドを削除す" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[:first_method, :second_method, :third_method, :forth_method]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class RemovedMethodClass\n", " def first_method; end\n", " def second_method; end\n", " def third_method; end\n", " def forth_method; end\n", "end\n", "\n", "RemovedMethodClass.instance_methods(false)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[:first_method, :forth_method]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RemovedMethodClass.class_eval do\n", " remove_method :second_method, :third_method\n", "end\n", "\n", "RemovedMethodClass.instance_methods(false)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "method `undefined_method' not defined in RemovedMethodClass", "output_type": "error", "traceback": [ "\u001b[31mNameError\u001b[0m: method `undefined_method' not defined in RemovedMethodClass", "
:1:in `remove_method'", "
:1:in `block in
'", "
:in `class_eval'", "
:in `
'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:12:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:90:in `execute_request'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:49:in `dispatch'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:38:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:110:in `run_kernel'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:40:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/bin/iruby:5:in `'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `load'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `
'" ] } ], "source": [ "RemovedMethodClass.class_eval do\n", " remove_method :undefined_method\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 10-2-7 クラスやモジュールからインスタンスメソッドを未定義にする" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ ":inherite\n" ] }, { "ename": "NoMethodError", "evalue": "undefined method `super_method' for #", "output_type": "error", "traceback": [ "\u001b[31mNoMethodError\u001b[0m: undefined method `super_method' for #", "
:18:in `
'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:12:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:90:in `execute_request'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:49:in `dispatch'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:38:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:110:in `run_kernel'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:40:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/bin/iruby:5:in `'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `load'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `
'" ] } ], "source": [ "class SuperClass\n", " def super_method\n", " :super_method\n", " end\n", "end\n", "\n", "class InheriteClass < SuperClass\n", " def super_method\n", " :inherite\n", " end\n", "end\n", "\n", "p InheriteClass.new.super_method\n", "\n", "class InheriteClass\n", " undef_method :super_method\n", "end\n", "\n", "InheriteClass.new.super_method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 10-3 Bindingに含まれる変数について調べる\n", "### 10-3-1 Bindingオブジェクトのselfを確認" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#\n" ] }, { "data": { "text/plain": [ "true" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class BindingCreator\n", " def create_binding\n", " a = 1\n", " binding\n", " end\n", "end\n", "\n", "creator = BindingCreator.new\n", "binding_object = creator.create_binding\n", "p binding_object.receiver\n", "creator == binding_object.receiver" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 10-3-2 Bindingオブジェクトに含まれる変数名を一覧" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[:a]\n", "true\n" ] }, { "data": { "text/plain": [ "false" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p binding_object.local_variables\n", "p binding_object.local_variable_defined?(:a)\n", "binding_object.local_variable_defined?(:b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] }, { "ename": "NameError", "evalue": "local variable `b' is not defined for #", "output_type": "error", "traceback": [ "\u001b[31mNameError\u001b[0m: local variable `b' is not defined for #", "
:1:in `local_variable_get'", "
:1:in `
'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:12:in `eval'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:90:in `execute_request'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:49:in `dispatch'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:38:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:110:in `run_kernel'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:40:in `run'", "/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/bin/iruby:5:in `'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `load'", "/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `
'" ] } ], "source": [ "p binding_object.local_variable_get(:a)\n", "p binding_object.local_variable_get(:b)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "[:b, :a]\n" ] }, { "data": { "text/plain": [ "2" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p binding_object.local_variable_set(:b, 2)\n", "p binding_object.local_variables\n", "binding_object.local_variable_get(:b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "次回「10-4 イベントをフックする」から" ] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.7.1", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.7.1" } }, "nbformat": 4, "nbformat_minor": 4 }