Ruby Language
instance_eval
수색…
통사론
- object.instance_eval '코드'
- object.instance_eval 'code', 'filename'
- object.instance_eval 'code', 'filename', 'line number'
- object.instance_eval {code}
- object.instance_eval {| receiver | 코드}
매개 변수
매개 변수 | 세부 |
---|---|
string | 평가할 루비 소스 코드를 포함합니다. |
filename | 오류보고에 사용할 파일 이름. |
lineno | 오류보고에 사용할 줄 번호입니다. |
block | 평가할 코드 블록. |
obj | 리시버는 유일한 인수로 블록에 전달됩니다. |
인스턴스 평가
instance_eval
메소드는 모든 오브젝트에서 사용 가능합니다. 그것은 수신기의 맥락에서 코드를 평가합니다 :
object = Object.new
object.instance_eval do
@variable = :value
end
object.instance_variable_get :@variable # => :value
instance_eval
은 코드 블록이 지속되는 동안 self
를 object
로 설정합니다.
object.instance_eval { self == object } # => true
리시버는 유일한 인수로 블록에 전달됩니다.
object.instance_eval { |argument| argument == object } # => true
이 점에서 instance_exec
메소드는 다르다. 대신 인수를 블록에 전달한다.
object.instance_exec :@variable do |name|
instance_variable_get name # => :value
end
다음과 함께 구현
많은 언어에는 프로그래머가 메소드 호출의 수신자를 생략 할 수있는 with
문이 있습니다.
with
는 instance_eval
사용하여 Ruby에서 쉽게 에뮬레이트 될 수 있습니다 :
def with(object, &block)
object.instance_eval &block
end
with
메서드는 객체에서 메서드를 원활하게 실행하는 데 사용할 수 있습니다.
hash = Hash.new
with hash do
store :key, :value
has_key? :key # => true
values # => [:value]
end
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow