2013-06-22 3 views
2
Transcript show: 'Derp'. 

printSomething: 'Derpy'. 

"The method above produced this error:" 
"prog.st:3: expected expression" 

printSomething: what 
    10 timesRepeat: [ 
     Transcript show:what. 
     Transcript cr. 
    ]. 

저는 스몰 토크를 지금 가르치려고 노력하고 있으며, 필자가 작성한 함수를 호출하는 방법을 아직 모르고 있습니다. 구문 printSomething: 'Derpy'.을 사용하여 'Derpy' 매개 변수를 사용하여 함수 printSomething을 호출하려고했지만 함수를 호출하는 대신 prog.st:3: expected expression이라는 오류가 발생했습니다.GNU 스몰 토크에서 함수를 정의하고 호출하는 올바른 방법은 무엇입니까?

여기서 내가 잘못된 것은 무엇이고 스몰 토크에서 매개 변수가있는 함수를 호출하는 올바른 방법은 무엇입니까? 지금까지 읽은 튜토리얼에서는 아직까지 내 질문에 대답하지 않았으며 여전히 약간 혼란 스럽습니다.

+0

코드에 대문자 오류가 있습니다. 메서드 이름은 대문자 P이지만 소문자 p로 호출하려고합니다. – fzwo

+0

@fzwo 그럼에도 불구하고 대문자 오류가 수정 된 경우에도 동일한 오류가 발생합니다. Smalltalk 함수 호출에 대한 올바른 구문을 아직 파악하지 못했습니다. –

+0

다음 번에는 사용중인 스몰 토크를 나타내는 태그를 추가하십시오. GNU Smalltalk과 Squeak/Pharo는 소스 코드를 다루는 방식이 상당히 다릅니다. –

답변

2

나는 당신의 오류는 두 가지이다 의심 :

Object class: #Example [ 
    instanceVariableNames: '' 
    classVariableNames: '' 
    poolDictionaries: '' 
    category: 'Smalltalk Examples' 
] 

Example class extend [ 
    printSomething: what 
     10 timesRepeat: [ 
      Transcript show:what. 
     ] 
] 

Eval [ 
    Transcript show: 'Derp'. 
    (Example new) printSomething: 'Derpy'. 
] 

참고 Eval [] 블록, 당신은 Example하지 NameOfSubclass의 인스턴스를 만들 수있다.

+0

이 답변은 스몰 토크의 어떤 방언입니까? –

+0

GNU 스몰 토크는 OP가 링크 된 코드의 구문과 일치합니다. –

1

어떤 클래스에서 메소드를 정의 했습니까? 메시지를 보내는 클래스를 지정하지는 않습니다 (메서드를 실행하도록 지정). Transcript show: 'Derp'.의 경우

, 당신은 전역 변수 Transcript (스트림 클래스의 인스턴스)에 메시지를 보내는, 그리고 show:Transcript 또는 그 상위 클래스 중 하나를 구현하는 클래스의 방법이다. 이 방법은 당신이에서 보내는 같은 클래스에 정의 된 경우

, self가 사용하는 키워드입니다, 그래서 self printSomething: 'Derpy'.

+0

클래스에서 메서드를 정의하지 않았습니다. 스몰 토크의 모든 메서드를 클래스 내부에서 정의해야합니까? –

+0

그런 다음/어떻게 정의 했습니까? 저는 약간 녹슬고 다른 스몰 토크 환경은 작업 공간에서 물건을 정의하는 것과 같은 일을 다르게 처리하지만, 일반적으로 스몰 토크는 매우 객체 지향적입니다. – fzwo

+0

여기에서 메서드를 정의했습니다. http://ideone.com/Ln7eCn –

2

스몰 토크 순수 객체 지향 언어가 될 것이다. 클래스에 정의 된 메소드를 호출하는 객체에만 메시지를 보낼 수 있습니다.

printSomething을 어떤 클래스에서 정의 했습니까? 인스턴스 메소드로 정의한 경우 해당 클래스의 인스턴스에서 호출해야합니다. 예 :

MyClass new printSomething: 'Derpy' 

클래스 메소드로 정의한 경우 직접 클래스 자체로 보낼 수 있습니다.

+0

아마 Pharo Smalltalk와 우수한 온라인 서적 인 www.pharo-project.org를 확인하십시오. 이것은 스몰 토크를 일반적으로 배우는 데있어 더 많은 도움이 될 것입니다. –

2

스몰 토크를 배우려고 할 때 스몰 토크 환경을 사용하십시오. 명령 줄 인터페이스를 사용하지 마십시오. 온라인 웹 도구를 사용하지 마십시오. 둘 다 매우 유용하지만 smalltalk을 배우지는 않습니다. 그들은 smalltalk을 잘 배우는 데 필요한 피드백을 제공하지 않습니다. 디버거에서 대부분의 코드를 작성할 수 없으면 smalltalk에 대해 배우지 않습니다.

작은 이야기를 배우기 위해 개발 된 책과 환경은 Pharo By Example입니다. 거기에서 이미지와 VM을 사용하십시오. Pharo는 빠르게 개발하고 있습니다. 최신 버전을 사용하면 혼란 스러울 수 있습니다.

+0

GNU 스몰 토크의 경우 명령 행 인터페이스는 스몰 토크 환경입니다! (그것은 REPL입니다.) –

+0

예. * smalltalk을 배우기 위해 그것을 사용하지 마십시오. 나는 또한 작은 토크를 배우기 위해 토파즈를 추천하지 않습니다. 또는 Amber (아직 디버거가 필요합니다.) –

1

gnu-smalltalk 3.2.5.

Object subclass: Example [ 
    printSomething: what 
    [ 
     10 timesRepeat: [ 
      Transcript show:what. 
     ] 
    ] 
] 

Eval [ 
    Transcript show: 'Derp'. 
    (Example new) printSomething: 'Derpy'. 
] 
관련 문제