Ruby에서 임의의 코드를 실행할 수있는 환경을 여러 개 갖고 싶습니다. 이 코드는 새 클래스를 정의 할 수 있습니다.이 클래스를 정의한 환경에서만이 새 클래스를 사용할 수 있습니다.Ruby에서 다른 범위에 숨겨진 클래스를 정의 할 수 있습니까?
예를 들어, 나는 이런 식으로 뭔가를 할 :
class Environment
def evaluate(&code)
# Evaluate the code in this environment.
end
end
e1 = Environment.new
e2 = Environment.new
e1.evaluate do
class InnerClass
# ...
end
puts InnerClass.nil? # false
end
e2.evaluate do
puts InnerClass.nil? # true
end
내가 instance_eval
를 사용하고 Binding
내부 평가를 시도했다, 그러나이 중 어느 것도 다른 환경에서 클래스를 숨 깁니다. 이것을 할 수있는 좋은 방법이 있습니까?
매우 좋습니다. 네가 할 수 있다는 것을 나는 몰랐다. 그러나 아직 완벽하지는 않습니다. 새 클래스를 대문자 이름 (예 : "InnerClass")에 할당하려고하면 전역 상수가됩니다. –
예, 클래스를 상수에 할당하면이를 상수에 할당합니다. 클래스를 상수에 할당하지 않으려면이를 상수에 할당하지 마십시오. –
@ JörgWMittag 하하 그렇습니다. 나는 이것을 이해합니다. 문제는 전역 상수가 아닌 로컬 상수가되도록하려는 것입니다. 그것은 Ruby에는 존재하지 않는 것 같습니다. –