在 setter 方法的情况下,为什么 irb 会回显赋值的右侧而不是返回值?

2024-02-05

令人惊讶的是,在所有其他情况下 irb 都会回显方法的返回值。为什么通过 setter 进行分配的行为会有所不同?

我正在使用 Ruby 2.2.2。

irb(main):001:0> def x=(value); puts "puts_from_x"; "returned_string_from_x"; end
=> nil

irb(main):002:0> self.x = 3
puts_from_x
=> 3

update

我突然意识到它与 rhs 相呼应,因为那是实际返回值。为什么是这样?


按照@Matz 的回复thread https://groups.google.com/d/msg/comp.lang.ruby/cSnpqgspnhw/5be3F3hQSPYJ :

Setter 总是返回最初分配给它们的值 这是一个设计选择。我们将分配的值定义为 右边表达式的值,而不是返回值 分配方法。

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

在 setter 方法的情况下,为什么 irb 会回显赋值的右侧而不是返回值? 的相关文章

随机推荐

  • 运行Hadoop时如何避免OutOfMemoryException?

    我正在运行一个超过 1 5 TB 数据的 Hadoop 作业 并进行大量模式匹配 我有几台每台 16GB RAM 的机器 我总是得到OutOfMemoryException使用这些数据来完成这项工作 我正在使用 Hive 我想知道如何最佳设
  • 多行函数调用的左括号必须是该行的最后一个内容

    我在 PHP 文件中写入以下代码 public function ScriptsStyles wp enqueue style fontawesome plugins url css font awesome css FILE array
  • WPF:“名称”和“x:名称”之间有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 在 WPF 中 x Name 和 Name 属性之间有什么区别 https stackoverflow com questions 589874 in wpf what are the differe
  • Android CoroutineScope 完成后自动取消

    我想知道是否coroutineScope工作完成后将自动取消 假设我创建了一个coroutineScope在自定义类中而不是 ViewModel类或Fragment Activity class class MyClass private
  • firebase存储cors奇怪的行为

    我正在构建一个应用程序 让用户看到一组缩小的图像 然后按 确定 让应用程序下载所有原始文件 将它们放入 zip 文件中并发送 zip 文件 该应用程序使用polymer polymerfire firebase 包括存储 在上传图像的过程中
  • 组合两个 Linq lambda 表达式

    Expression
  • 没有 AppBar 的 Flutter 布局

    我需要一个没有应用栏的布局 所以最明显的方法是省略appbar标签上的Scaffold但如果我这样做 内容就会出现在状态栏下方 如下所示 正如您所看到的 我的蓝色容器从状态栏下方开始 但事实并非如此 因此我必须手动设置容器的边距 这不太好
  • 在文件夹中查找最新文件并打开它(vba 访问)

    我正在尝试使用以下代码通过访问按钮宏打开文件夹中的最新文件 使用 if 语句进行测试 没有发现任何问题 但是一旦我使用了 do while 我就收到了运行时 6 溢出的错误消息 does len dir 不能使用循环 下面是我的代码 Pri
  • 在终端中,将多个文件夹合并为一个

    我有一个由 WDBackup 西部数据外置硬盘备份实用程序 创建的备份目录 其中包含每天备份的目录以及备份内容的增量内容 所以层次结构看起来像这样 20100101 My Documents Letter1 doc My Music Bes
  • 根据从 WSDL 中提取的多个模式验证 XML

    我尝试使用 SAAJ 手动处理 Web 服务请求 但仍然根据 Web 服务的 WSDL 架构验证接收到的请求 这个特定的 WSDL 包含多个元素 我使用 wsdl4j 提取这些元素 当我尝试创建新的验证器时 我收到一条错误消息 说明该验证器
  • Android:监听电源键按下

    我目前正在尝试监听何时按下电源按钮 最终 我希望在按两次电源按钮时运行一些代码 以检查屏幕是否锁定或解锁 我目前有这个 Override public void onCreate Bundle savedInstanceState supe
  • 在 datagridview 中右对齐列不起作用

    我有一个datagridiview这是动态绑定到datatable 我想将标题中的一些列右对齐 我尝试了这个设置datagridview对于单元格样式和标题单元格 对于单元格样式 它显示正确 但对于标题 它不是 我使用的代码 this da
  • 在 GitHub 中编辑 git 提交消息

    有没有办法在线编辑提交消息GitHub com 提交后 从命令行 人们可以做 git commit amend m New commit message 正如以下问题中正确建议的那样 如何修改现有的 未推送的提交消息 https stack
  • 如何防止表单被提交?

    我有一个表单 其中某处有一个提交按钮 但是 我想以某种方式 捕获 提交事件并防止其发生 我有什么办法可以做到这一点吗 我无法修改提交按钮 因为它是自定义控件的一部分 与其他答案不同 返回false只是part的答案 考虑一下在 return
  • 在 Yii 中创建三个以上表的关系

    当我尝试在 Yii 中创建三个以上表的关系时 以下方法给我带来了麻烦 public function relations return array info gt array self BELONGS TO Software ITEM ID
  • Swift 可以从异步 Void 返回块返回值吗?

    我想创建一个函数来检查 user id 是否已在我的数据库中 class func checkIfUserExsits uid String gt Bool userRef childByAppendingPath uid observeS
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • matplotlib.mplot3d 立方体表面的底图

    正如标题所示 我试图在 matplotlib mplot3d 线图的 z 0 表面上绘制底图地图 我知道 Axes3D 对象能够在 z 0 表面上绘图 通过 Axes3D plot Axes3D scatter 等 但我不知道如何使用 Ba
  • 从一组坐标中找到最接近的坐标

    我有大约 1000 组地理坐标 纬度 经度 给定一个坐标 我想从该集合中找到最接近的一个 我的方法是测量距离 但每秒数百个请求对于服务器执行所有数学运算来说可能有点粗糙 对此最好的优化解决方案是什么 Thanks 您将想要使用 最近邻算法
  • 在 setter 方法的情况下,为什么 irb 会回显赋值的右侧而不是返回值?

    令人惊讶的是 在所有其他情况下 irb 都会回显方法的返回值 为什么通过 setter 进行分配的行为会有所不同 我正在使用 Ruby 2 2 2 irb main 001 0 gt def x value puts puts from x