{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "foo\n", "foo\n", "foo\n" ] } ], "source": [ "class Parent\n", " @@val = 'foo'\n", " \n", " def self.say\n", " puts @@val\n", " end\n", "end\n", "\n", "class Child < Parent\n", " def say2\n", " puts @@val\n", " end\n", "end\n", "\n", "Parent.say\n", "Child.say\n", "Child.new.say2\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "(pry):35: warning: class variable access from toplevel\n" ] }, { "data": { "text/plain": [ "false" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "@@true = false" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Child\n", " def speak?\n", " @@true\n", " end\n", "end\n", "\n", "Child.new.speak?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4-1-10 クラス定義のネスト" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class My\n", " class FooClass\n", " end\n", "end\n", "\n", "My.new" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "My::FooClass.new" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#\n", "#\n" ] }, { "data": { "text/plain": [ "#" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class FooClass\n", "end\n", "\n", "class BarClass\n", " class FooClass\n", " end\n", "end\n", "\n", "p FooClass.new\n", "p BarClass::FooClass.new" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class FooClass::HogeCLass\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4-1-11 ネストした定数の参照" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\"in Foo class\"" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "VALUE = 'toplevel'\n", "\n", "class Foo\n", " VALUE = 'in Foo class'\n", " \n", " def self.value\n", " VALUE\n", " end\n", "end\n", "\n", "Foo.value" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\"toplevel\"" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Foo\n", " def self.top_value\n", " ::VALUE\n", " end\n", "end\n", "\n", "Foo.top_value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4-2 モジュール" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4-2-1 モジュールの特徴" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"VB\"\n", "\"ruby\"\n" ] }, { "data": { "text/plain": [ "\"ruby\"" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "module Language\n", " def self.lot\n", " %w(ruby python C# VB Perl).sample\n", " end\n", "end\n", "\n", "p Language.lot\n", "p Language.lot" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Language::LL\n", "Language::Java\n" ] }, { "data": { "text/plain": [ "Language::Java" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "module Language\n", " module LL\n", " end\n", " \n", " class Java\n", " end\n", "end\n", "\n", "p Language::LL\n", "p Language::Java" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4-2-2 メソッドをクラスのインスタンスメソッドとし取り込む" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, Bob. My name is Alice.\n" ] } ], "source": [ "module Greetable\n", " def greet_to(name)\n", " puts \"Hello, #{name}. My name is #{self.class}.\"\n", " end\n", "end\n", "\n", "class Alice\n", " include Greetable\n", "end\n", "\n", "alice = Alice.new\n", "alice.greet_to 'Bob'" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, Bob. My name is Alice.\n", "Nice to meet you!\n" ] } ], "source": [ "class Alice\n", " include Greetable\n", " \n", " def greet_to(name)\n", " super\n", " \n", " puts 'Nice to meet you!'\n", " end\n", "end\n", "\n", "alice = Alice.new\n", "alice.greet_to 'Bob'" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] }, { "data": { "text/plain": [ "[\"a\", \"b\", \"c\"]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class FriendList\n", " include Enumerable\n", " \n", " def initialize(*friends)\n", " @friends = friends\n", " end\n", " \n", " def each\n", " for v in @friends\n", " yield v\n", " end\n", " end\n", "end\n", "\n", "friend_list = FriendList.new('A', 'B', 'C')\n", "p friend_list.count\n", "friend_list.map {|v| v.downcase}\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A\n", "B\n" ] } ], "source": [ "module ModuleA\n", " def from_a\n", " puts \"A\"\n", " end\n", "end\n", "\n", "module ModuleB\n", " def from_b\n", " puts \"B\"\n", " end\n", "end\n", "\n", "class MyClass\n", " include ModuleA\n", " include ModuleB\n", "end\n", "\n", "obj = MyClass.new\n", "obj.from_a\n", "obj.from_b" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.2.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": "rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.2.2" } }, "nbformat": 4, "nbformat_minor": 0 }