{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 6-2-3 クラスメソッド" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_method" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " def self.class_method\n", " :class_method\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Klass\n" ] }, { "data": { "text/plain": [ ":class_method" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " def (p self).class_method\n", " :class_method\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_method" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " def Klass.class_method\n", " :class_method\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_method" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", "end\n", "\n", "def Klass.class_method\n", " :class_method\n", "end\n", "\n", "Klass.class_method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6-2-4 メソッドの定義" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":Klass" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def Klass\n", " def instance_method\n", " :instance_method\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":instance_method" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " define_method :instance_method, -> {:instance_method}\n", "end" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":instance_method" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "object = Klass.new\n", "object.instance_method" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":included_module_method" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "module IncludedModule\n", " def included_module_method\n", " :included_module_method\n", " end\n", "end\n", "\n", "class Klass\n", " include IncludedModule\n", "\n", " define_method :included_module_method,\n", " IncludedModule.instance_method(:included_module_method)\n", "end\n", "\n", "object = Klass.new\n", "object.included_module_method" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":un_included_module_method" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "module UnIncludedModule\n", " def un_included_module_method\n", " :un_included_module_method\n", " end\n", "end\n", "\n", "class Klass\n", " define_method :un_included_module_method, UnIncludedModule.instance_method(:un_included_module_method)\n", "end\n", "# Ruby 1.9 ではエラーになるけれど 2.0 以降は MethodTransplanting のおかげでエラーにはならない。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.5.1", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.5.1" } }, "nbformat": 4, "nbformat_minor": 2 }