ruby-on-rails - 如何使用 Ruby 访问多态性中的变量?

标签 ruby-on-rails ruby

我正在尝试访问每个多态方法中的 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)

最佳答案

您以错误的方式运行它。您应该创建具体形状的实例,然后调用它们的方法:

[8] pry(main)> circle = Circle.new
=> #<Circle:0x0000563ed7328770>
[9] pry(main)> circle.size = 5
=> 5
[10] pry(main)> circle.calculate_area
=> 12.566370614359172

关于ruby-on-rails - 如何使用 Ruby 访问多态性中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932538/

相关文章:

ruby-on-rails - 动态 SASS 生成

ruby - Resque - 可以用来执行 Rake 任务吗?

ruby-on-rails - 用于查找注释代码的工具/gem

ruby-on-rails - Ruby on Rails : looping through records, 但不显示当前 ID 的记录

ruby - 简单的单行将行与常见的第一个字段合并

ruby-on-rails - 使用已经声明的 Rails 模型

ruby-on-rails - 将时间与时间范围进行比较,并在之前、期间或之后返回

java - 使用 JRuby 将 Ruby on Rails 应用程序的所有 .rb 文件编译为 .class,将其打包为 .war 并部署到 Java 应用程序服务器中

ruby-on-rails - 对模型的多个字段施加唯一约束

ruby-on-rails - 未设置安全 session cookie