로그'메타프로그램 루비 버전 2'5장 읽기
제5장: 목요일: 정의 클래스
개시하다
범주 정의
class MyClass
puts 'Hello'
end
result = class Myclass
self
end
result #=> MyClass
현재 수준
현재 객체
Module#class_eval
def add_method_to(a_class)
a_class.class_eval do
def m; 'Hello!'; end
end
end
add_method_to Strign
"abc".m #=> "Hello!"
"abc".m.class #=> String
instance_eval 및 classeval의 차별화 사용
현재 분류 요약
클래스 인스턴스 변수
메소드 필드에 정의된 변수는 인스턴스 변수입니다.
참고 자료 이 글은 매우 참고 가치가 있다.
class MyClass
@my_var = 1
def self.read; @my_var; end
def write; @my_var = 2; end
def read; @my_var; end
end
obj = MyClass.new
# インスタンスメソッドでアクセスできない。
obj.read #=> nil
obj.write
# インスタンスメソッドwriteで定義したものを呼び出す
obj.read #=> 2
# クラスメソッドで呼び出せる!
MyClass.read #=> 1
클래스 변수
class C
@@v = 1
end
특수한 방법
개별 객체에 특화된 방법
str = "just a regular string"
def str.title?
self.upcase == self
end
self.title? #=> false
str.methods.grep(/title?/) #=> [:title?]
str.singleton_methods #=> [:title?]
루비의 유형
'형'은 대상이 반응하는 방법의 집합일 뿐 유동형이다.
실제 분류 방법
종류
클래스 정의에 사용되는 클래스 방법
특수류
특수류는 대상의 특이한 방법이 있는 곳이다
Object#singleton_class
또는 class << 構文
를 통해 볼 수 있습니다객체에 특이한 방법이 있는 경우 Ruby는 일반 클래스가 아닌 특이 클래스 방법부터 검색을 시작합니다.
Ruby 객체 모델의 7가지 규칙
유형 방법의 문법
class MyClass
def self.another_class_method; end
end
class MyClass
class << self
def yet_another_class_method; end
end
end
메소드 레지스터
반사 별칭
class myClass
def my_method; 'my_method()'; end
alias_method :m, :my_method
end
obj = MyClass.new
obj.my_method #=> "my_method()"
obj.m #=> "my_method()"
방법 재정의
반사 별명을 정리해 보도록 하겠습니다.
감상
응,, 어려워.억지로 먹는 느낌
시차를 두고 다시 한 번 읽다.
Reference
이 문제에 관하여(로그'메타프로그램 루비 버전 2'5장 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/baramatsubonzo/items/593e6381c73a2ba73919텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)