2017-02-09 6 views
1

Game 클래스를 만들었고 Board라는 메서드를 사용했습니다.이 메서드는 stdin 2 정수를 받아 들여야하며 1 정수는 column 변수에 할당되고 다른 정수는 행 변수에 할당됩니다. 그래서 예를 들어, pharo 및이 입력에 개방 증명서 :Pharo Smalltalk의 스크립트에서 메서드를 호출 한 후 어떻게 인수를 사용할 수 있습니까?

'게임 새 보드 2 3'

는해야 열 = 2, 행 = 3하지만이 작업을 수행하는 방법을 알아낼 수 없습니다.

여기에 내 코드 시도

board 

| col rows | 

col := stdin nextNumber 

rows := stdin nextNumber 

Transcript cr; show: col asString, rows asString 

이 작동하지 않는 것입니다. 나는 보드 게임을 만들어야하고, 심지어는 성적표/작업 공간에서 인수를 받아들이는 방법을 파악할 수 없으며 다음 월요일에 만기가 될 것입니다.

답변

3

관용적 인 방법을 보여 드리겠습니다. 2 행 : 당신이 당신의 놀이터에서

게임 newBoardColumns 입력하면 3

후 작은 동전을하고 이동을, 디버거는 #newBoardColumns:rows: 메시지가 게임 이해되지 않는다는 것을 말하고 나타납니다. 디버거에는 해당 메서드를 추가 할 수있는 만들기 단추가 있습니다. 당신은 게임의 클래스 측에서 추가를 선택하면 게임 클래스의 새 인스턴스를 반환합니다

newBoardColumns: aColumns rows: aRows 
    ^self basicNew 
    initializeColumns: aColumns rows: aRows; 
    yourself 

같은로 구현하고, 열과 행 방법을 초기화 할 수 있습니다. 저장하고 디버거에서 실행을 다시 시작하면 디버그 도구 #initializeColumns:rows:을 알지 못한다고 불평 할 것이므로 이번에는 게임의 인스턴스 쪽에서 같은 방식으로 만들어야합니다. 저장하려고 할 때

initializeColumns: aColumns rows: aRows 
    columns := aColumns. 
    rows := aRows. 
    self initialize. 

, 인스턴스 변수로 columnsrows을 추가해야합니다. 이제 실행을 다시 시작하고 관리자 패널에서 게임을 검사 할 수 있습니다. (: 2 행 : 3 게임 newBoardColumns)

과 작은 동전을 보여

, 당신은 당신의 놀이터

를 입력 할 수있는 성적 증명서에 뭔가를 표시합니다.그러면 #show이 이해되지 않는다는 것을 나타내는 디버거가 다시 나타납니다. 게임에서 구현할 수 있습니다.

show 
    Transcript cr; show: columns asString,' ', rows asString 
2

대본은 대화 형 터미널이 아닌 로깅 스트림과 비슷하지만 스몰 토크 표현식을 평가할 수 있습니다 (작업 영역/놀이터 및 기타 많은 "텍스트 상자"에서도 수행 할 수 있습니다). 즉, "입력"/ 평가 된 텍스트는 유효한 스몰 토크 식이어야합니다. Game new board 2 3은 아닙니다.

오히려 보드 방법은 두 개의 인수를해야 다음과 같은 :

boardWithColumns: cols rows: rows 
    Transcript cr; show: cols asString, rows asString 

참고 변경된 방법 서명을. 코드에서와 달리 col 및 행은 더 이상 임시 변수가 아니지만 메시지 인수가 전송됩니다.

그런 다음 Game new boardWithColumns: 2 rows: 3을 평가하여 대본에이 치수를 인쇄 할 수 있습니다.