1
class_eval (코드로 변환되는 문자열을 취함)과 같이 새로운 def 메소드로 클래스를 선언하는 것은 본질적으로 같은 것입니다.Ruby에서 클래스 확장하기 (def 대 class_eval)
정말 동일합니까? 각 장단점은 무엇입니까?
class_eval (코드로 변환되는 문자열을 취함)과 같이 새로운 def 메소드로 클래스를 선언하는 것은 본질적으로 같은 것입니다.Ruby에서 클래스 확장하기 (def 대 class_eval)
정말 동일합니까? 각 장단점은 무엇입니까?
이 평가하는 일반적인 방법의 정의와 블록 사이에 거의 차이가 없다 : 경우,
bench(1000000) do
B.class_eval("def test1; end")
end
=> 24.02 sec
어쨌든, 이러한 구조는 자신의 목적에 의해 사용되어야한다 : 여기
bench(1000000) do
class A; def test; end end
end
=> 2.5 sec
class B; end
bench(1000000) do
B.class_eval{ def test; end }
end
=> 2.75 sec
는 그러나이 평가 문자열을 큰 차이입니다 당신은 metaprogramming을 한 다음 클래스 또는 인스턴스 평가를 사용합니다. 만약 당신이 단지 메소드를 정의한다면, 사소한 일에는 너무 영리하지 마십시오.