Meta-2 장 - 객체 모델
16627 단어 Ruby
개방 클래스
require 'test/unit'
def to_alphanumeric(s)
s.gsub /[^\w\s]/, '' # [a-zA-Z0-9_空白]以外
end
class ToAlphanumericTest < Test::Unit::TestCase
def test_steps_non_alphanumeric_characters
assert_equal '3 the Magic Number', to_alphanumeric('#3, the ***Magic, Number*?')
end
end
require 'test/unit'
class String
def to_alphanumeric
gsub /[^\w\s]/, ''
end
end
class ToAlphanumericTest < Test::Unit::TestCase
def test_steps_non_alphanumeric_characters
assert_equal '3 the Magic Number', '#3, the ***Magic, Number*?'.to_alphanumeric
end
end
[].methods.grep /^re/
# [:repeated_permutation, :repeated_combination, :reject, :reverse_each, :replace, :reverse, :reverse!, :reject!, :reduce, :remove_instance_variable, :respond_to?]
"".methods.grep /^re/
[:replace, :reverse, :reverse!, :remove_instance_variable, :respond_to?]
Object 및 instance 변수
class MyClass
def my_method(v)
@v = v
end
end
obj1 = MyClass.new.my_method(5)
obj2 = MyClass.new.my_method(7)
obj3 = MyClass.new
obj3.instance_variables
# []
obj3.my_method
obj3.instance_variables
# [:@v]
대상은 instance 변수와class에 대한 링크로 구성되어 있습니다
대상의method는class에 산다.class로 봤을 때 instance method라고 불려요.
class는 Class 클래스의 대상입니다.유명은 상수에 불과하다.
Class는 Module의 하위 클래스입니다.
module와class의 이름은 디렉터리입니다. 상수는 파일과 같은 느낌입니다
module MyModule
MyConstant = 'out 定数'
class MyClass
MyConstant = 'innner 定数'
end
end
MyModule::MyConstant
# "out 定数"
MyModule::MyClass::MyConstant
# "inner 定数"
require, load method
파일을 한 번만 읽기
호출할 때마다 파일 실행하기
require './a.rb'
# loadは定数が変数を汚染する、防ぐためにtrueオプション
load('a.rb', true)
class에는 BasicObject에 대한 계승 체인이 있습니다
method 탐색
obj.my_method
수신기obj
수신기class MyClass
def my_method
@v = 1
end
end
class SubClass < MyClass
end
obj = SubClass.new
obj.my_method
SubClass.ancestors
# SubClass, MyClass, Object, Kernel, BasicObject]
class에 모듈을 넣습니다.
module M1
def my_method
@v = 1
end
end
class C
include M1
end
class C1
prepend M1
end
class D < C
end
D.ancestors
# [D, C, M1, Object, Kernel, BasicObject]
class E < C1
end
E.ancestors
# [E, M1, C1, Object, Kernel, BasicObject]
만약 모듈이 체인에 포함되어 있다면, 두 번째 무시
module M1; end
module M2
include M1
end
module M3
prepend M1
include M2
end
M3.ancestors
# [M1, M3, M2]
Kernel
require 'awesome_print'
local_time = { :city => "Roma", :now => Time.now }
ap local_time, :indent => 2
#{
# :city => "Roma",
# :now => 2017-03-29 21:32:45 +0900
#}
# awesome_printがKernelにap methodを追加している
method를 호출할 때 수신기는self입니다
class MyClass
def testing_self
@var = 10
my_method
self
puts @var
end
def my_method
@var = @var + 1
end
end
obj = MyClass.new
obj.testing_self
# #<MyClass:0x007f83542e7cd0 @var=11>
# testing_selfを呼び出すとレシーバであるobjがselfになる
# そのためinstance変数@varはobjのinstance変数となる
# レシーバを明示していないmy_methodの呼び出しもobjに対するものとなる
# my_method時もselfはobjなので@varはobjのinstance変数のまま
# よって、@varは+1される
최상위
self # main
self.class # Object
Refinements
module StringExtensions
refine String do
def to_alphanumeric
gsub(/[^\w\s]/, '')
end
end
end
"my *1st* refinement!".to_alphanumeric
# NoMethodError
using StringExtensions
"my *1st* refinement!".to_alphanumeric
# "my 1st refinement!"
module StringExtensions
refine String do
def reverse
"esrever"
end
end
end
module StringStuff
using StringExtensions
"my *1st* refinement!".reverse
# "esrever"
end
"my *1st* refinement!".reverse
# "!tnemenifer *ts1* ym"
Doctement print를 실행하려는 경우
module Printable
def print
puts 1
end
def prepare_cover
puts 2
end
end
module Document
def print_to_screen
prepare_cover # 2 Printableで発見
format_for_screen # 3 Documentで発見
print # 1
end
def format_for_screen
puts 3
end
def print
puts 4
end
end
class Book
include Document # Bookの真上に入る
include Printable # Bookの真上に入る
puts 5
end
# Book > Printable > Document > Object > Kernel > Basic Object
b = Book.new
b.print_to_screen
# 5 2 3 1
Book.ancestors
# [Book, Printable, Document, Object, Kernel,
BasicObject]
b.method(:print).owner
# Printable
Ctrl + L
pry 화면 지우기
Reference
이 문제에 관하여(Meta-2 장 - 객체 모델), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sunoko/items/10e0d11f71de3f5a1dbc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)