2015-04-12 47 views
1

我正在嘗試註釋掉我的任務中的所有代碼。但是,當我嘗試編譯(或者正在進行的任何事情;我真的不知道)時,就會嘗試在引號內編譯代碼。根據我正在使用的書(「On Smalltalk」--Winston),Smalltalk忽略了最初的雙引號,這個雙引號和下一個雙引號之間的所有字符,最後它也忽略了下一個雙引號。爲什麼這不起作用?正在編譯的註釋內的代碼

我試着把整個代碼放進一組雙引號,結果更糟。

我特別使用Smalltalk/X。我只想幫助解決導致評論錯誤的任何問題。

,我得到當代碼編譯是錯誤:

===>分析器[錯誤]:未聲明的變量:刪除 編譯/評估爲UndefinedObject 而讀C使用時:\ Users \用戶灰心\桌面\ blank.st 或靠近行3相對於組塊的開始]

===>分析器[錯誤]:未聲明的變量:彈出 編譯時/評估爲UndefinedObject 而讀C:\用戶\勸阻\桌面\ blank.st 在或接近第4行[相對於塊開始]

===>「[」意外。 (缺少「。」,「:」或之前的選擇器?) 編譯/評估UndefinedObject 而讀取C:\ Users \ Discouraged \ Desktop \ blank.st 或接近第5行[相對於塊開始]

===>意想不到在字符串 編譯/評估爲> UndefinedObject 而讀C使用時結束輸入:\用戶\泄氣> \桌面\ blank.st 或靠近行1相對於組塊的開始]

的代碼:

" 
Build a stack based (RPN - Reverse Polish Notation) calculator for rational 
numbers 

Smalltalk at: #maxStackSize put: 32 

Object subclass: #Stack  
    instanceVariableNames: 'stackArray stackTop' 
    classVariableNames: '' 
    poolDictionaries: '' 
! 
Stack class comment: ' 
    Redundant stack class 
' 
! 

!Stack methodsFor: 'initialize'! 

new 
^super new. 
! 

init 
    stackArray := Array new: maxStackSize. 
    stackTop := -1. 
! ! 
" 
" 
!Stack class methodsFor: 'manipulating the stack'! 
" 
" 
Removes the top entry from the stack. 
pop 
    [self empty 
     ifTrue: [ 
     Transcript 
      cr; 
      show: 'Stack is EMPTY!'; 
      cr.] 
     ifFalse: [stackTop := stackTop - 1]. 
    ] 
! 
" 

回答

4

您正在嘗試使用fileout格式對Smalltalk進行編碼,該格式用於記錄和傳輸代碼,而不是開發。所以難怪你感到沮喪。您應該加載IDE並使用瀏覽器編寫代碼。 Smalltalk IDEs是編碼,測試和運行的令人愉快的環境。

您的fileout有幾個問題。例如,你不能嵌套註釋(「s)」,而且,你錯過了一個尾隨句點,有一些不匹配的註釋引號,並且在一個字符串中包含一個!下方。

但是,最重要的,加載IDE並使用它。你會發現,與IDE做你的課堂作業會更愉快。

" 
Build a stack based (RPN - Reverse Polish Notation) calculator for rational 
numbers 
" 

Smalltalk at: #maxStackSize put: 32. 

Object subclass: #Stack  
    instanceVariableNames: 'stackArray stackTop' 
    classVariableNames: '' 
    poolDictionaries: '' 
! 
Stack class comment: ' 
    Redundant stack class 
' 
! 

!Stack methodsFor: 'initialize'! 

new 
^super new. 
! 

init 
    stackArray := Array new: maxStackSize. 
    stackTop := -1. 
! ! 

!Stack methodsFor: 'manipulating the stack'! 

pop 
"Removes the top entry from the stack." 
    self empty 
     ifTrue: [ 
     Transcript 
      cr; 
      show: 'Stack is EMPTY!!';   
      cr.] 
     ifFalse: [stackTop := stackTop - 1]. 
! 
+0

所以你不能註釋掉代碼,除非代碼正確編譯沒有註釋符號? 例如在Java中,如果我輸入 System.out.println(「我討厭Smalltalk」); 這是編譯 和 // System.out.println(「我討厭Smalltalk」); 這被視爲評論而不是編譯 Smalltalk不以這種方式表現嗎? 此外,我們被限制SmalltalkX [鏈接] http://www.exept.de/en/products/smalltalk-x.html。 –

+3

你絕對可以註釋掉任何東西,甚至是不能編譯的代碼,只要確保你正確地關閉了註釋即可。所以,如果你用雙引號引出註釋,記住多餘的引號會關閉註釋,所以用一對引號重新打開它。這與「as」轉義基本相同,這與任何語言的打開/關閉註釋沒有什麼不同,例如'/ * Yo,* /這是註釋* /'在Java中無效,但由於Smalltalk最好是在瀏覽器窗口中作爲單獨的方法開發,因此從不需要評論大塊代碼 –

+0

「所以你不能......」 - 請閱讀我的答案。 – blabla999

0

的FILEOUT格式基本上是一個運輸格式,它使用非轉義的劉海(!)作爲唱片分隔符。「! !「(中間有一個空格)是一個空的記錄,它們通過雙擊」!!「逃脫 - 沒有空格,當這樣的文件被歸檔時,它首先被分割成這樣的記錄(語言不可知), THEN由編譯器分析。 因此,當在一個這樣的記錄中開始註釋並且在另一個「結束」它時,編譯器僅獲得半塊來編譯並且會抱怨。

ST/X文檔中實際上有一些關於fileOut格式的文檔,您應該閱讀它。

這就是爲什麼在外部編輯器中編輯chink-filout文件是一個糟糕的主意 - 你必須非常小心地加倍爆炸並且不要破壞這個記錄結構。 PS:我看到你的麻煩,因爲「stc」編譯器(將ST轉換爲C)使用這種輸出格式作爲輸入。但是這個編譯器是爲了最終部署而不是爲了開發而編譯出來的代碼(來自IDE)。