Как получить доступ к переменной в полиморфизме с помощью Ruby? - PullRequest
2 голосов
/ 08 июля 2019

Я пытаюсь получить доступ к переменной size в каждом из полиморфных методов.Когда я запускаю код, я получаю следующую ошибку:

examples.rb:181:in `calculate_area': undefined method `/' for nil:NilClass (NoMethodError)
        from examples.rb:175:in `calculate_area'
        from examples.rb:199:in `<main>'

Я пробовал множество хаков, но не нашел хорошего решения.Вот код ниже.

class Shape    

    attr_accessor :size

    def calculate_area(shape_type)
        shape_type.calculate_area
    end
end

class Circle < Shape
    def calculate_area
        return Math::PI * (size / 2) * (size / 2)
    end
end

class Square < Shape
    def calculate_area
        return size * size
    end
end

class Triangle < Shape
    def calculate_area
        return 0.5 * (size * 2) * size
    end
end

shape = Shape.new
shape.size = 5
puts shape.calculate_area(Circle.new)
puts shape.calculate_area(Square.new)
puts shape.calculate_area(Triangle.new)

1 Ответ

6 голосов
/ 08 июля 2019

Вы управляете этим неправильно. Вы должны создать экземпляры конкретных фигур, а затем вызвать методы для них:

[8] pry(main)> circle = Circle.new
=> #<Circle:0x0000563ed7328770>
[9] pry(main)> circle.size = 5
=> 5
[10] pry(main)> circle.calculate_area
=> 12.566370614359172
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...