Я изучаю Smalltalk несколько дней назад, и я работаю над проектом, который в основном находит область и периметр для класса окружности, который реализуется из класса Shape. Другими словами, Shape - суперкласс для Circle.Как умножить целое число с значениями float в Smalltalk
Когда я запускаю свой код, я получил сообщение об ошибке «числовой примитивный ожидаемый числовой аргумент, полученный». Я считаю, что ошибка возникает, потому что я умножаю целое число с значением float. Я не знаю, как исправить ошибку, поэтому, если кто-то может дать мне несколько предложений?
P.S - Я использую usmalltalk, который является конкретной версией Smalltalk, но имеет те же функции.
(class Shape Object
(Perimeter Area)
(method getPerimeter() Perimeter)
(method setPerimeter:(Perim)
(set Perimeter Perim)
)
(method CreateShape::(Perim Ar)
(set Perimeter Perim)
(set Area Ar)
self
)
(class-method NewShape:: (Perimeter Area)
(CreateShape:: (new self) Perimeter Area)
)
)
(class Circle Shape
(Radius)
(method getRadius() Radius)
(method setRadius:(radi)
(set Radius radi)
(set Perimeter (* (* 2 (asFloat (/ 22 7))) Radius)) #The error exits here
(set Area (* (* (asFloat (/ 22 7)) Radius) Radius))
)
(method CreateCircle:(radi)
(set Radius radi)
self
)
(class-method NewCircle: (Radius)
(CreateCircle: (new self) Radius)
)
)
Где вызывается 'setRadius'? –
@ScottHunter, когда я вызываю setRadius в классе Circle, будет обновлять Perimeter и Area (используя Shape) для класса Circle, используя уравнение (показано) – harrisonthu
Сообщение об ошибке на самом деле означает, что вы пытаетесь размножаться пустой строкой. . –