3
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.
    ].

私は今 Smalltalk を独学しようとしていますが、自分が書いた関数を呼び出す方法がまだわかりません。ステートメントを使用printSomethingしてパラメーターを指定して関数を呼び出そうとしましたが、関数を呼び出す代わりに、次のエラーが発生しました: .'Derpy'printSomething: 'Derpy'.prog.st:3: expected expression

ここで何が間違っていますか? Smalltalk でパラメーターを使用して関数を呼び出す正しい方法は何ですか? これまでに読んだチュートリアルのどれも私の質問に答えておらず、まだ少し混乱しています。

4

5 に答える 5

2

gnu-smalltalk 3.2.5。

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

Eval [
    Transcript show: 'Derp'.
    (Example new) printSomething: 'Derpy'.
]
于 2014-01-13T19:07:17.380 に答える
2

Smalltalk は純粋なオブジェクト指向言語です。クラスで定義されたメソッドを呼び出すオブジェクトにのみメッセージを送信できます。

どのクラスで printSomething を定義しましたか? インスタンス メソッドとして定義した場合は、そのクラスのインスタンスで呼び出す必要があります。例えば:

MyClass new printSomething: 'Derpy'

クラス メソッドとして定義した場合は、クラス自体に直接送信できます。

于 2013-06-22T21:19:00.640 に答える
2

どのクラスでメソッドを定義しましたか? メッセージを送信するクラスを指定していません(メソッドを実行するように指示しています)。

の場合Transcript show: 'Derp'.、グローバル変数Transcript(Stream クラスのインスタンス) にメッセージを送信し、またはそのスーパークラスの 1 つにshow:実装されたクラス メソッドです。Transcript

送信元と同じクラスでメソッドが定義されている場合、self使用するキーワードは次のようになります。self printSomething: 'Derpy'.

于 2013-06-22T21:12:32.913 に答える
2

あなたのエラーは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

于 2013-06-25T18:12:47.157 に答える
2

smalltalk を学習しようとするときは、smalltalk 環境を使用してください。コマンド ライン インターフェイスやオンライン Web ツールは使用しないでください。どちらも非常に便利ですが、smalltalk を学習するためのものではありません。彼らは、あなたが smalltalk を上手に素早く学ぶために必要なフィードバックを提供しません。 デバッガーでほとんどのコードを記述できない場合、smalltalk を学習することはできません。

smalltalk を学ぶために開発された本と環境は Pharo By Exampleです。そこからイメージと vm を使用します。Pharo は急速に開発されており、最新バージョンを使用すると混乱する可能性があります。

于 2013-06-24T09:44:10.787 に答える