2014-04-21 9 views
0

저는 로컬 변수에만 액세스 할 수있는 사용자 정의 함수가있는 BASIC의 방언에 조금 썼습니다. 예를 들어, 다음 코드는 : S$someFunction$의 맥락에서 값이 없기 때문에기능이 전역 범위에 액세스 할 수없는 언어는 무엇입니까?

let S$ = "Hello, world!" 

fn.def someFunction$() 
    print S$ 
    fn.rtn "a string" 
fn.end 

X$ = someFunction$() 

은 빈 줄을 인쇄 할 것이다.

질문 : 함수 내부에서 액세스 할 수없는 전역 범위가있는 다른 언어가 공용되어 있습니까?

+1

전역 적으로 액세스 할 수없는 범위는 전역 범위가 아닙니다. – geoffspear

+0

"최상위 범위"는 더 명확한 용어입니까? – JasonFruit

+0

내가 아는 것은 아니지만, 오래된 구식 방언을 제외하고. 이 방언은 어느 것입니까? –

답변

2

이 질문의 근거는 오해입니다. 이 방언의 Basic은 대부분의 다른 언어와 마찬가지로 전역 범위가 없습니다. 동일한 카테고리에는 많은 언어가 있습니다.

처음 설명. 많은 초기 컴퓨터 언어에는 모든 변수가 정의 된 단일 범위가있었습니다. 이것이 너무 제한적 일 때 동일한 스코프 (COBOL PERFORM 및 BASIC GOSUB)를 공유하거나 인수 전달 (FORTRAN CALL 및 RETURN)과 완전히 별개의 범위를 정의한 서브 루틴 기능을 추가했습니다.

하나의 언어가 달라졌습니다 : Algol. 중첩 된 어휘 범위를 정의하여 변수 참조가 블록 또는 외부 중첩 블록에있을 수 있습니다. 이것은 특이한 기능이었으며 널리 복사되지 않았습니다.

또한 Fortran은 COMMON이라는 연결 메커니즘을 제공합니다. 이것은 다른 언어에 의해 채택되었습니다. C는 블록 범위, 외부 범위 (외부 연결 포함)를 추가했지만 중첩 함수는 추가하지 않으므로 함수는 다른 함수의 범위에서 변수에 액세스 할 수 없습니다.

기본 언어의 방언은 Basic/Fortran 계열에 속합니다. 주 프로그램과 사용자 정의 함수 각각에 대해 겹치지 않는 범위를 갖지만 외부 연결은 분명히 없습니다. 작성 방법에 관계없이 사용자 정의 함수는 자체 범위를 가지며 물론 주 프로그램의 변수에 액세스 할 수 없으며 이는 상당히 다른 범위에 있습니다. Basic의 일부 방언은 공통적 인 기능을 가지고 있지만,이 방언은 생각하지 않습니다.

그래서 대부분의 언어 (이 종류의)는 중첩 된 범위를 제공하지 않으며 내부 범위가 외부 범위의 내용에 액세스하는 것을 허용하지 않습니다. [Lisp 가계도는 물론 전혀 다릅니다.]

흥미로운 예외가 하나 있습니다. 객체 지향 언어는 파스칼과 유사한 언어 인 Simula에서 주로 파생되었으며 클래스 스코프 내부에서 메소드를 중첩하는 아이디어를 도입했습니다. 그 아이디어는 확실히 붙잡 혔습니다.

+0

정말 매력적입니다. 역사 수업을 가져 주셔서 감사합니다! – JasonFruit