Ruby,堆栈级别太深(SystemStackError)

2024-02-16

我有以下代码:

class BookPrice
  attr_accessor :price
  def initialize(price)
    @price = price
  end

  def price_in_cents
    Integer(price*100 + 0.5)
  end
end

b = BookPrice.new(2.20)
puts b.price_in_cents

这一切都运行良好并产生 220。但是当我将第二行 attr_accessor :price 替换为:

def price
  @price = price
end

我收到堆栈级别太深(SystemStackError)错误。这是怎么回事?我知道我可以将 Integer(price*100 + 0.5) 替换为 @price 而不是方法调用价格,但出于 OOP 原因,我想保持原样。在没有 attr_accessor 的情况下,如何使该代码按原样工作?


你的下面的代码

def price
  @price = price # <~~ method name you just defined with `def` keyword.
end

创建永不停止的递归。

在没有 attr_accessor 的情况下,如何使该代码按原样工作?

你需要写成

def price=(price)
  @price = price
end
def price
  @price 
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby,堆栈级别太深(SystemStackError) 的相关文章

随机推荐

  • 如何将打印对话框添加到printpreviewdialog?

    我的老板要我创建具有打印功能的窗口窗体 但他想要打印datagridview预览后 所以现在我鼓励这个问题 我无法打印多套纸张或选择打印机或在单击打印按钮时进行任何更改printpreviewdialog 当我点击按钮时 它会直接打印纸张
  • 在 .NET 中使用 MySQL GeoSpatial 数据类型

    我正在寻找有关如何在 NET 中使用 MySQL 几何类型的信息 我使用 Sub sonic 进行 ORM 并且实际上不需要支持比 MySQL 的 POINT 类型更多的内容 MySQL NET 连接器似乎以 OpenGIS WKB 格式的
  • r 管道 image_annotate 无法按预期工作

    我正在尝试使用magick从一堆图像创建一个动画 gif 它工作得很好 但我想在创建 gif 之前为每个图像注释文本 基本上是文件名 但这不起作用 我找不到错误的原因 如下 不确定是管道符号 映射函数还是其他原因 library purrr
  • 如何在 Windows 7 上安装 SIP 和 PyQT

    我是 Python 环境的新手 在我的 Win 7 机器上安装 SIP 和 PyQt 真的很困难 这就是我到目前为止所做的 我已经下载了SIP 4 16 9 https riverbankcomputing com software sip
  • 如何覆盖 Azure Web App 自定义部分中的 web.config 值?

    在 Azure Web App 中可以轻松覆盖 web config AppSettings 部分 例如 如果我有以下 web config
  • React-redux:如何编写集成测试

    我在用Enzyme测试我的反应和还原部分 我阅读了周围的内容 发现为组件编写集成测试也是一个很好的做法 所以 这很简单 因为我必须调用操作创建者并根据存储检查它们的更新值 但我有一些返回的异步操作dispatch行动 登录 actions
  • 调整浏览器窗口大小时调整网格大小

    我用了一个填满整个窗口 http mleibman github com SlickGrid examples example12 fillbrowser html作为默认示例 尝试调整浏览器窗口的大小 但是用于网格的区域是相同的 需要重新
  • 如何从AccessibilityNodeInfo获取webview

    我正在创建一个需要使用 AccessibilityService 的应用程序 并且获取其他应用程序的窗口内容也是没有问题的 我已从窗口内容中检测到所有可用的子项 并且该子项显示在 AccessibilityNodeInfo 中 现在我在 A
  • log4net 每次运行一个文件

    我需要我的应用程序在每次运行时创建一个日志文件 我的首选格式是App log yyyy MM dd HH mm ss 如果那不可能 我会满足App log yyyy MM dd counter 这是我当前的附加程序配置
  • 最值得一读的Python模块

    我已经学习Python有一段时间了 我对其特性有了很好的了解 但我想改进我的编码风格 我认为阅读 Python 模块的源代码是个好主意 有谁可以特别推荐一下吗 相关主题 寻找美观且具有指导意义的 Python 代码的初学者 https st
  • 到 Web 服务的 XMLHttpRequest 在 Web Worker 中不起作用

    如果从主 javascript 调用 下面的代码可以完美运行 但它不会在 Web Worker 中运行 function getSpecData detailLvl startWeek endWeek mkt var params deta
  • Xcode 5 升级 - 现在 nsobject.h 存在类“NSObject”的重复接口定义错误

    我昨晚升级到了 X Code 5 现在 当我继续开发我的一个 iOS 应用程序 在以前的 Xcode 版本上编译得很好 时 我遇到了一个似乎无法解决的错误 当我构建应用程序时 出现编译错误 duplicate interface defin
  • iOS 5.x 和 iOS 6 调用 application:didFinishLaunchingWithOptions: 的次数不同

    Subj 在 iOS 5 x 中 我得到了方法调用的下一个结果 UIViewController initWithCoder UIApplicationDelegate didFinishLaunchingWithOptions UIVie
  • 容器适配器不支持迭代器

    在一篇关于 STL 的 C 文章中 有人说 由于容器适配器不支持迭代器 因此它们不能与 STL 算法一起使用 但它没有解释为什么容器适配器不支持迭代器 有人能给我同样的解释吗 具有迭代器的堆栈或队列有什么意义 根据定义 堆栈是只能压入和弹出
  • 使用 ggplot 绘制栅格因子值

    我在使用 ggplot2 绘制具有因子值的栅格时遇到问题 library ggplot2 library raster 首先 加载栅格数据 f lt system file external test grd package raster
  • Dart PetitParser 获取使用 ExpressionBuilder 创建的 AST 数据结构

    我是 petitparser 的新手 但它看起来像是解析器的声波螺丝刀 对于我的第一个项目 我正在构建代码来解析一个简单的表达式 该表达式构建 Node 对象的 AST 树 然后使用一些规则遍历该树以最小化不需要的括号 我不知道要传递什么到
  • 通过浏览器原生 Facebook 登录体验

    我见过这个问题的几种风格 但没有具体的答案 所以我自己尝试一下 我正在尝试通过浏览器在我的基于 Facebook 的应用程序中构建 Facebook 登录体验 这将要求用户尽可能不记住他们的密码 这意味着如果 他们通过桌面浏览器登录并且已经
  • Hibernate子对象不保存

    我有一个员工和员工部门表 一名员工可以拥有多个部门 我已经在 MySQL 中定义了表并使用 JPA 生成了实体 package model import java io Serializable import javax persisten
  • 使用prepareForSegue作为按钮

    您好 我以编程方式创建按钮并将按钮连接到另一个视图 但我遇到了 segue 问题 我应该对故事板使用prepareForSegue方法 但我不知道互联网上有一些示例 但当我使用该示例时我会收到错误 请你帮助我 提前致谢 这是我的代码 创建按
  • Ruby,堆栈级别太深(SystemStackError)

    我有以下代码 class BookPrice attr accessor price def initialize price price price end def price in cents Integer price 100 0 5