2012-06-18 2 views

답변

8

여기 아이러니 란 것은 덮어 쓰지 마십시오. "print"라는 이름의 데이터 객체를 만들었고 콘솔에 print을 입력하면 eval-print 루프가 인계되어 반환되었습니다. print("something") 또는 print(42)을 입력하여 인쇄 동작을 올바르게 테스트 했더라도 통역사가 기본 NAMESPACE에서 여전히 print.default 기능을 찾을 수 있음을 알았을 것입니다. 기존 함수와 이름이 같은 데이터 객체를 정의하는 것은 나쁜 습관입니다. R 인터프리터에서 덮어 쓰지 않기 때문에가 아니라 사용자의 마음에 겹쳐 쓰므로 좋습니다. 인터프리터는 함수 호출을 나타내는 괄호가 있는지 여부를 확인하여 사용자의 의도를 결정합니다 (어쨌든 어떻게할지 결정 함). print 문자 다음에 "("가 붙는다면, 인터프리터는 인자의 클래스를보고 적절한 print 메소드를 보낸다.)

3

네임 스페이스에서 다시 받아

print = base::print 
+3

이것은 전역 환경에서 불필요한'base :: print' 복사본을 만든다. 여러분이 작성한'print' 객체를 삭제하십시오. (대답은 @gsk입니다.) –

+1

NAMESPACE는베이스에 없었습니다. 기본 함수를 사용하는 것보다 프로그래밍 폭력이 더 많이 걸립니다. –

10

rm 그냥 실행할 수 있도록, 기본 개체를 제거하지 않습니다 흥미롭게

rm(print) 

을, 당신 인쇄 일 :

> print <- FALSE 
> print 
[1] FALSE 
> print("hi") 
[1] "hi" 
> rm(print) 
> print("hi") 
[1] "hi" 
> print 
function (x, ...) 
UseMethod("print") 
<bytecode: 0x2a3a148> 
<environment: namespace:base> 
관련 문제