在 Ruby 中冻结变量不起作用 [重复]

2024-02-19

我正在学习 Ruby,并且在使用时发现了有趣的行为Object#freeze带变量的方法。

在我冻结一个变量之后(或者Fixnum or Array),我还是可以修改的!这很奇怪,因为就我而言,这不应该发生,而且TypeError应该提高。

这是我的代码:

test = 666
var = 90
#ok
var += 5

puts "var.frozen? #{var.frozen?}"    
var.freeze    
puts "var.frozen? #{var.frozen?}"

var = test
puts "var = #{var}"

对于数组也是如此:

test = [666]
var = [90]
#ok
var += [5]

puts "var.frozen? #{var.frozen?}"    
var.freeze    
puts "var.frozen? #{var.frozen?}"

var = test
puts "var = #{var}"

但是,当我尝试在冻结后将某些内容推入数组时,它会引发错误,正如预期的那样:

test = [666]
var = [90]
#ok
var += [5]

puts "var.frozen? #{var.frozen?}"    
var.freeze    
puts "var.frozen? #{var.frozen?}"

var << test
puts "var = #{var}"

有人可以向我解释这个问题吗?看起来很奇怪。

Edit我使用的是 Windows XP + Ruby 1.9.3-p429


您冻结对象,而不是变量,即您无法更新冻结的对象,但可以将新对象分配给同一变量。考虑一下:

a = [1,2,3]
a.freeze
a << 4
# RuntimeError: can't modify frozen Array

# `b` and `a` references the same frozen object
b = a
b << 4    
# RuntimeError: can't modify frozen Array

# You can replace the object referenced by `a` with an unfrozen one
a = [4, 5, 6]
a << 7
# => [4, 5, 6, 7]

顺便说一句:冷冻是没有用的Fixnums,因为它们是不可变的对象。

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

在 Ruby 中冻结变量不起作用 [重复] 的相关文章

  • 在 ruby​​ 中获取多维数组的维度

    我刚刚开始学习红宝石 现在我需要计算出多维数组的维数 我查看了所有数组方法的 ruby docs 但找不到返回维度的方法 这是一个例子 For 1 2 3 4 5 6 维数应为 2 For 1 2 2 3 3 4 5 维度应为 3 简单的
  • 变量的多个值介于 0 和数字序言之间

    所以我一直在尝试自学序言 我认为我进展顺利 然而 我有点坚持我正在尝试的这一种方法 toN N A A 等于 0 到 N 1 之间的整数值 按升序生成 所以 toN 5 A 将是 A 0 A 1 A 2 A 3 A 4 我对序言还很陌生 所
  • 如何使用多个 { 'not find' } 来干燥方法?

    我正在尝试优雅地处理以下错误的 JSON 其中Hash fetch似乎不是一个选择 使用 Hash fetch 优雅地处理错误的 JSON https stackoverflow com questions 25193627 handle
  • 批处理 - 将 dir 命令的输出存储到变量 - 目录列表中

    我需要将整个目录列表存储到一个变量中 然后将所述变量作为参数传递给另一个脚本 直接或首先将 dir 的输出存储到文本文件中 然后执行如下操作 dir path todir gt temp txt set p VAR
  • Excel VBA - 将一行单元格值传递到数组,然后将该数组粘贴到单元格的相对引用

    使用 Excel 2010 VBA 我尝试将恒定范围的单元格 其值重新计算 复制 传递 到数组 然后我尝试将该数组传递到其正下方的新单元格范围 完成此操作后 我想再次将常量范围的新值复制 传递 到数组 并将这些新值传递到我之前传递的值正下方
  • 将元数据添加到 PDF

    我需要将元数据添加到我正在创建的 PDF 中prawn http rubygems org gems prawn 该元数据稍后可能会被提取 pdf阅读器 http rubygems org gems pdf reader 该元数据将包含内部
  • Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

    从头开始重建 Mac 安装了 xcode 和 rvm 然后尝试安装 rubies 但它们都给了我 Error running configure prefix Users durrantm rvm rubies ruby 1 9 3 p12
  • Python:在任意维度中使用冒号运算符对数组进行索引

    我有一个 numpy nd 数组 我的任务的简化版本是沿着每个轴获取一个向量 为了显示 import numpy x numpy array range 24 reshape 2 3 4 x0 x 0 0 x1 x 0 0 x2 x 0 0
  • 重新排列 numpy 数组

    我正在尝试 就地 修改 numpy 数组 我感兴趣的是就地重新排列数组 而不是 return ing 数组的重新排列版本 这是一个示例代码 from numpy import def modar arr arr arr 1 0 commen
  • React 重新渲染数组,而 item key 没有改变

    列表的非常基本的代码示例 class List extends React Component render const listComponent this props numbers map number gt
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • 计算复杂数组的abs()值的最快方法

    我想计算 C 或 C 中复杂数组元素的绝对值 最简单的方法是 for int i 0 i lt N i b i cabs a i 但对于大向量来说 速度会很慢 有没有办法加快速度 例如使用并行化 语言可以是 C 或 C 鉴于所有循环迭代都是
  • 如何在 scala 中的二维数组上使用 contains 方法

    我有一个二维数组 我想检查二维数组内是否存在数组 我努力了 var arr Array Array 2 1 Array 4 3 var contain arr contains Array 4 3 println contain 这应该打印
  • ActiveSupport::JSON 解码哈希丢失符号

    我正在尝试序列化和反序列化哈希 当散列被解除序列化时 密钥被解除符号化 例如不是更多 一 而是 一 从 Rails 控制台 gt gt h one gt 1 two gt two one gt 1 two gt two gt gt j Ac
  • ruby 中 for 循环的语法

    如何在 Ruby 中执行这种类型的 for 循环 for int i 0 i
  • 搜索数组中的最高键/索引

    我怎样才能得到highest key index在一个数组中php questions tagged php 我知道如何为价值观做这件事 例如 我想从这个数组中得到10 as an integer value arr array 1 gt
  • 如何为DNA序列生成一种热编码?

    我想为一组 DNA 序列生成一个热编码 例如 序列ACGTCCA可以以转置方式表示如下 但下面的代码将以水平方式生成一种热门编码 我更喜欢以垂直方式生成 谁能帮我 ACGTCCA 1000001 A 0100110 C 0010000 G
  • 耙子的目的是什么?

    我知道 Rake 代表 Ruby Make 而且我知道 Make 是一个 Unix 构建实用程序 现在 我来自 Xcode 工作 将 iPhone 应用程序构建到 Ruby 所以我以前从未使用过 Make 我唯一使用 rake 的时候是在
  • 从字符串中删除多个子字符串 - Java

    我需要从给定字符串中删除多个子字符串 例子 String exclude one two three String input if we add one and two we get three 我希望我的程序从输入字符串中删除所有出现的
  • 拆分字符串而不删除分隔符

    我需要解析一个文件以获取单个 SQL 语句并从 Rails 控制器运行它们 我有以下代码 sql file RAILS ROOT lib evidence interface import sql sql stmts array File

随机推荐

  • 为什么我的 Perl 祝福文件句柄不使用“can('print')”返回 true?

    由于某种原因 我无法让文件句柄与 Expect pm 一起使用log file方法 我最初得到的帮助是如何将文件句柄传递给 Perl Expect 的 log file 函数 https stackoverflow com question
  • 在 pymongo 中快速或批量更新

    如何在 pymongo 中进行批量更新插入 我想更新一堆条目 但一次更新一个非常慢 几乎相同问题的答案在这里 MongoDB 中的批量更新 更新插入 https stackoverflow com questions 4444023 bul
  • 与 CMake 交叉编译时的 Makefile 生成器规范

    我有两件事无法弄清楚 1 使用时CMake GUI 我们可以指定makefile生成器 我将使用 Debian Linux 交叉编译 Raspberry PI 我找不到相关的生成器 我必须选择哪种发电机 我有toolchain rpi cm
  • fscanf 读取最后一个整数两次[重复]

    这个问题在这里已经有答案了 我有以下简单的程序来读取文本文件 num txt 该文本文件每行包含数字 1 2 3 4 5 当我运行该程序时 它打印 5 两次 谁能告诉我为什么会发生这种情况以及如何解决它 提前致谢 int main void
  • 如何创建自动滚动列表

    我正在尝试使用 CSS 动画构建自动滚动列表 我现在得到了什么 players webkit transition opacity 0 5s ease out webkit animation autoScrolling 5s linear
  • Mac Spark-shell 初始化 SparkContext 时出错

    我尝试在 Mac OS Yosemite 10 10 5 上使用启动 Spark 1 6 0 spark 1 6 0 bin hadoop2 4 bin spark shell 它有以下错误 我也尝试安装不同版本的 Spark 但都有相同的
  • d3:在transition.tween() 中使用*name* 参数

    根据文档transition tween https github com mbostock d3 wiki Transitions tween calling transition tween name factory 为指定的对象注册一
  • 如何检查两个日期时间是否在彼此的特定范围内?

    我有两个 datetime64 对象 a 和 b 我想确定它们是否在彼此的特定范围内 然而 范围并不对称 如果a在b的 30到120分钟之间 a比b早半小时到晚2小时之间 则两者在期望的范围内 我的日期时间对象看起来像 m d Y H M
  • Swift 惰性和可选属性

    和有什么区别Lazy or Optional斯威夫特的财产 例如 如果有人正在构建一个从侧面进入的导航栏 我认为这一切都应该在一个内UIViewController 用户可能永远不会打开菜单 但有时他们会 var menu Navigati
  • 在 C++11 中实现递归代理模式

    假设我们有一些Foo允许的对象 cout lt lt myFoo 3 myFoo 5 bar 这需要代理设计模式 斯科特 迈耶斯 Scott Meyers 详细介绍如下 https stackoverflow com questions 2
  • 将 MongoDB 集合移动到另一个集合的更好方法

    在我的网络抓取项目中 我需要将前一天抓取的数据从mongo collection to mongo his collection 我正在使用此查询来移动数据 for record in collection find his collect
  • 我可以在 .gitignore 文件中包含其他 .gitignore 文件吗? (就像类 C 语言中的 #include 一样)

    我有一些文件 例如vim gitignore SVN gitignore and CVS gitignore 散布在我的硬盘上 我可以简单地将这些 gitignore 文件包含在 gitignore文件在新的 Git 项目中吗 Edit 我
  • 空指针的取消引用

    该错误消息到底意味着什么以及如何修复它 空指针的取消引用 这意味着 self 可以通过 initWithStyle reuseIdentifier 的返回值设为 nil 并且后续对默认值的访问将尝试在 nil 地址处读取 因此取消引用 这肯
  • 如何避免包含类实现文件?

    而不是做 include MyClass cpp 我想要做 include MyClass h 我在网上读到过not这样做被认为是不好的做法 简而言之单独编译 首先 让我们举一些简单的例子 struct ClassDeclaration c
  • Flink时间特性和AutoWatermarkInterval

    在 Apache Flink 中 setAutoWatermarkInterval interval 向下游操作员生成水印 以便他们提前事件时间 如果水印在指定的时间间隔内没有更改 没有事件到达 运行时将不会发出任何水印 另一方面 如果在下
  • 如何将列表附加到 pandas 列、系列?

    假设我有以下数据框 d col1 1 2 col2 3 4 df pd DataFrame data d 我想延长col1带数组xtra 然而这会出错 xtra 3 4 df col1 append xtra 我怎样才能追加xtra to
  • 如何从 Swift 中的 valueChanged 事件获取触摸坐标

    背景 I ve 以前学过的 https stackoverflow com a 34764356 3681880如何使用手势识别器或continueTrackingWithTouch获取当前触摸位置的持续更新 然后使用它们执行如下操作 然而
  • 如何获取CodeAttribute中的属性值

    我写了一个方法来按属性获取属性值 public string GetAttributeValueByNameAttributeAndProperty CodeClass cc string nameAttribute string name
  • 如何在 Jenkins 的 url 中传递 credentialID

    我正在使用这个命令 sh git push https userid passwd innersource com scm raghu demo git 但我想使用 credentialsId f0079d43 9522 4133 9601
  • 在 Ruby 中冻结变量不起作用 [重复]

    这个问题在这里已经有答案了 我正在学习 Ruby 并且在使用时发现了有趣的行为Object freeze带变量的方法 在我冻结一个变量之后 或者Fixnum or Array 我还是可以修改的 这很奇怪 因为就我而言 这不应该发生 而且Ty