�@�����̃I�u�W�F�N�g�w���v���O���~���O����ł́A�uKlass�v�N���X�ɑ��āA�uKlass.hoge�v�Ƃ����`�Ń��\�b�h���Ăяo����悤�Ȏd�g�݂�������Ă��܂��B����ɂ�薼�O�͈Ⴂ�܂����A��ʓI�Ɂu�N���X���\�b�h�v�ƌ����ꍇ�������悤�ł��B
�@�������ARuby�ł����l�̂��Ƃ��ł��܂��B��{�I�ȋ@�\�̂悤�Ɏv���܂����A���̂Ƃ���ARuby�̃��^�v���O���~���O�𗝉������ő�ȁA�uself�v�u���ك��\�b�h�v�u���كN���X�v�Ƃ������T�O���o�ꂷ��A���̐[�����E�Ȃ̂ł��B�����ł́A�����̊T�O�ɂ��Đ������܂��B
�@Ruby�ŃR�[�h�������Ă���ƁA�����ɂ͂����uself�v�����݂��܂��B�Ƃ͂����A���i������ӎ����邱�Ƃ͂��܂�Ȃ��ł��傤�B�uself�v��Ruby�ɑg�ݍ��܂�Ă���ǂݎ���p�̕ϐ��ł��B�C���X�^���X�ϐ��ɃA�N�Z�X����ꍇ��A���\�b�h���Ăяo���ꍇ�ɂ͂��́uself�v���d�v�Ȍ��ƂȂ�܂��B
�@�ł́Apry���g���āA�g�߂ɑ��݂���uself�v�������Ă݂܂��傤�B
[1] pry(main)> self => main [2] pry(main)> self.class => Object
�@Ruby�̃C���^�v���^�[���J������Ԃ��u�g�b�v���x���v�ƌĂсA�g�b�v���x���ł́uself�v�A���Ȃ킿���݂̃I�u�W�F�N�g�́umain�v�ł��邱�Ƃ�[1]���番����܂��B[2]�ł́A���́umain�v�̃N���X���uclass�v���\�b�h���g���Ē��ׂĂ���A�uObject�v�N���X�ł��邱�Ƃ�������܂��B�܂�A�g�b�v���x���ł́A�uself�v�́uObject�v�N���X�̃I�u�W�F�N�g�ł���A�Ƃ������Ƃł��B
�@�ł́A�ȒP�ȃN���X�̗���g���āA�uself�v�ɉ��������Ă���̂����ώ@���܂��傤�Bmeta_programming_02.rb�ɃR�[�h�������܂��B
puts "=====================" p self p self.class puts "=====================" class Rabbit puts "=====================" p self p self.class puts "=====================" def jump puts "=====================" p self p self.class puts "pyon pyon" puts "=====================" end end Rabbit.new.jump
$ ruby meta_programming_02.rb ===================== main Object ===================== ===================== Rabbit Class ===================== ===================== #<Rabbit:0x007fc43b0daf78> Rabbit pyon pyon =====================
�@�R�[�h��1�`4�s�ڂ́A�g�b�v���x���ł́uself�v�����ł��邩�������Ă��܂��B�o�͎͂��s���2�`5�s�ڂ��Ή����Ă��܂��Bpry�Ŋm���߂����Ɠ��l�ɁA�g�b�v���x���ł́uself�v�́umain�v�Ƃ������O�̃I�u�W�F�N�g��Ԃ��A���̃N���X�́uObject�v�ł��B
�@�R�[�h��7�`10�s�ڂ́A�N���X�̒�`�̒��ł́uself�v�����ł��邩�������Ă��܂��B�o�͎͂��s���6�`9�s�ڂ��Ή����Ă��܂��B�N���X��`�̒��ł́A�uself�v��Rabbit�N���X���̂��́iRuby�ł̓N���X���̂��̂��A�uClass�v�N���X�̃I�u�W�F�N�g�ł��邱�Ƃ��v���o���Ă��������I�j�ł��B
�@�R�[�h��13�`17�s�ڂ́A���\�b�h�̒�`�̒��ł́uself�v�����ł��邩�������Ă��܂��B�o�͎͂��s���10�`14�s�ڂ��Ή����Ă��܂��B���\�b�h��`�̒��ł́A�uself�v��Rabbit�N���X�̃I�u�W�F�N�g�ł��邱�Ƃ�������܂��B
�@���̂悤�ɁA�uself�v�̒��g�́A�R�[�h�̏ꏊ�ɂ���ĕς�邱�Ƃ�������܂��B
�@�����܂ł̗�ŁA�uself�v�͊m���ɂ����ɂ����āA�R�[�h�̏ꏊ�ɂ���ĕς�邱�Ƃ��m�F���܂����B�ł́A�uself�v�͂ǂ��Ŗ��ɗ��̂ł��傤���H �����́A���\�b�h��C���X�^���X�ϐ��փA�N�Z�X�̂Ƃ��ɖ𗧂��܂��B���̗��meta_programming_03.rb��meta_programming_04.rb�Ɏ����܂��傤�B
class Rabbit def initialize @roar = "boo" end def _speak puts @roar end def speak _speak end end Rabbit.new.speak
class Rabbit def initialize @roar = "boo" end def _speak puts @roar end def speak self._speak end end Rabbit.new.speak
$ ruby meta_programming_03.rb boo
�@�����̃R�[�h�ł́A�uRabbit�v�N���X���`���āA�R���X�g���N�^�[�ŃC���X�^���X�ϐ��u@roar�v�ɁA������boo��ݒ肵�Ă��܂��B�܂��A�u_speak�v����сuspeak�v���\�b�h���`���Ă���A�uspeak�v�́u_speak�v���Ăяo�����Ƃɂ���āA�C���X�^���X�ϐ��u@roar�v�̓��e���o�͂��Ă��܂��B
�@meta_programming_03.rb��meta_programming_04.rb�̈Ⴂ�́A11�s�ڂ́u_speak�v�̌Ăяo�������ł��B����܂ŁAmeta_programming_03.rb�̂悤�ȋL�@�𗘗p���Ă��܂������A�����meta_programming_04.rb�̂悤�ɁA�����I�Ɂuself�v���w�肷�邱�ƂŌĂяo�����Ƃ��ł��܂��B
�@Ruby�ł́A�u�o���V�[�o�[�i���\�b�h���Ăяo���Ώۂ̃I�u�W�F�N�g�j�p.�o���\�b�h�p�v�Ƃ����`�Ń��\�b�h���Ăяo�����Ƃ���{�ł��B����I�u�W�F�N�g�uobj�v�̃��\�b�h�uhoge�v���Ăяo���ꍇ�́A�uobj.hoge�v�ƂȂ�܂��B
�@���V�[�o�[���ȗ������ꍇ�imeta_programming_03.rb��11�s�ځj�́A���V�[�o�[�Ƃ��ĈÖٓI�Ɂuself�v���g���邽�߁A�����ɁuRabbit�v�N���X�́u_speak�v���\�b�h���Ăяo����Ă��܂��B�܂��A7�s�ڂ̂悤�ɃC���X�^���X�ϐ��ɃA�N�Z�X����ꍇ�́A�uself�v�̃C���X�^���X�ϐ����T������ĕԂ���܂��B
Copyright © ITmedia, Inc. All Rights Reserved.