수색…


통사론

  • 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 은 코드 블록이 지속되는 동안 selfobject 로 설정합니다.

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 문이 있습니다.

withinstance_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