Как мне отладить исходный код Squeak? - PullRequest
1 голос
/ 14 февраля 2011

Вот метод деления в Squeak 4.1:

/t1
| t2 |
t1 isInteger
    ifTrue: [t2 := self digitDiv: t1 abs neg: self negative ~~ t1 negative.
        (t2 at: 2)
                = 0
            ifTrue: [^ (t2 at: 1) normalize].
        ^ (Fraction numerator: self denominator: t1) reduced].
^ t1 adaptToInteger: self andSend: #/

Я не понимаю код. Можете ли вы дать мне несколько советов о том, как отладить код, чтобы я мог отслеживать поведение кода? Как открыть рабочее пространство, введите 4/3, я могу проверить во фракции. Есть объекты self, числитель, знаменатель и т. Д. Как я могу перейти к 4/3 и посмотреть, как Smalltalk реализовал деление?

1 Ответ

6 голосов
/ 14 февраля 2011

Прежде всего, что-то не так с вашими источниками. Метод Integer >> / на самом деле выглядит так:

/ aNumber
"Refer to the comment in Number / "
| quoRem |
aNumber isInteger ifTrue:
    [quoRem := self digitDiv: aNumber abs   "*****I've added abs here*****"
                    neg: self negative ~~ aNumber negative.
    (quoRem at: 2) = 0
        ifTrue: [^ (quoRem at: 1) normalize]
        ifFalse: [^ (Fraction numerator: self denominator: aNumber) reduced]].
^ aNumber adaptToInteger: self andSend: #/

Во-вторых, этот код используется только для больших целых чисел. Если вы оцениваете 4 / 3, этот метод не используется, а скорее SmallInteger >> / , который напрямую создает дробь.

Чтобы вызвать нужный метод, вам нужно использовать большое число, например ::

12345678901234567890 / 2

Выберите это выражение и выберите «отладить его» в контекстном меню. В качестве альтернативы вы можете использовать сообщение «halt» для вызова отладчика:

12345678901234567890 halt / 2

Когда появится отладчик, нажмите кнопку «Into», чтобы перейти к методу.

...