红宝石冻结方法

2023-12-31

def track_for stat
      # This is a hash with 2 elements of proc
      {
        symbol: -> { send(stat) },
        array:  -> { send(stat[0], stat[1]) }
      }.freeze[stat.class.name.underscore.to_sym].call
end

freeze[stat.class.name.underscore.to_sym].call ,我不知道这段代码。里面的代码的作用是什么[],以及为什么使用call方法?谁能帮助我?非常感谢。


Ruby Freeze 方法在不同的对象上完成以下操作,基本上它是在 Ruby 中使对象保持不变或不可变。

  1. String
str = "this is string"
str.freeze

str.replace("this is new string") #=> FrozenError (can't modify frozen String)
or
str[0] #=> 't'
str[0] = 'X' #=> FrozenError (can't modify frozen String)

但您可以分配新字符串或更改其引用。一旦引用发生变化,它就不是冻结(或常量)对象。

str = "this is string"
str.freeze
str.frozen? #=> true
str = "this is new string"
str.frozen? #=> false

  1. 大批 :-
arr = ['a', 'b', 'c']
arr.freeze

arr << 'd' #=> FrozenError (can't modify frozen Array)
arr[0] = 'd' #=> FrozenError (can't modify frozen Array)
arr[1].replace('e') #=> ["a", "e", "c"]
arr.frozen? #=> true

arr 数组被冻结意味着您无法更改该数组。但数组内的字符串并未冻结。如果执行替换操作 在字符串“one”上,恶作剧地将其转换为“e”,当您重新检查(仍然冻结!)数组时,会显示该字符串的新内容。

  1. Hash
hash = {a: '1', b: '2'}
hash.freeze

hash[:c] = '3' #=> FrozenError (can't modify frozen Hash)
hash.replace({c: '3'}) #=> FrozenError (can't modify frozen Hash)
hash.merge({c: '3'}) #=> return new hash {:a=>"1", :b=>"2", :c=>"3"}
hash.merge!({c: '4'}) #=> FrozenError (can't modify frozen Hash)
hash.frozen? #=> true

hash = {:a=>"1", :b=>"2", :c=>"3"}
hash.frozen? #=> false

所以我们不能修改哈希内容,但我们可以将其引用到新的哈希(就像数组一样)

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

红宝石冻结方法 的相关文章

随机推荐

  • IntelliJ JDK 16 抢先体验 - 有成功吗?工具.jar

    有没有人使用 JDK 16 取得过成功 https jdk java net 16 https jdk java net 16 使用 IntelliJ 进行早期访问构建 我能够使用 JDK 15 早期访问版本 但是当我尝试 JDK 16 时
  • 删除一项内的内容时在行上方创建神秘空间

    我有一个包含一些项目的网格 当我单击任何项 目时 我会将该项目的内容移动到模式中 该模式效果很好 但是当我从项目中删除内容时 项目上方会出现一个空格 我知道解决这个问题的方法可能是使用弹性盒 它工作得很好 但我想了解这里发生了什么 这里可能
  • CSS3 高度 100%

    我不知道如何问 写这个 所以请随时更新名称或指出正确的问题 标题 我正在设计一个跨 html5 css3 网站 并试图使其在每个 常见 浏览器上看起来都相同 这就是我所拥有的 http www pojotlan com example1 h
  • ProgressBars 和 Espresso

    当我在运行一些浓缩咖啡测试时显示的布局中有一个进度条时 然后我遇到 Caused by android support test espresso AppNotIdleException Looped for 1670 iterations
  • 在调试之前尝试启动带有任务的服务器时出现“无法跟踪指定的任务”

    我的调试配置如下launch json type node request attach preLaunchTask npm start name Attach port 9090 这是定义在中的任务tasks json type npm
  • C++ 和 D 中的元编程

    C 中的模板机制只是意外地对模板元编程有用 另一方面 D 是专门为促进这一点而设计的 显然它更容易理解 或者我听说过 我没有使用 D 的经验 但我很好奇 当涉及到模板元编程时 在 D 中可以做什么而在 C 中不能做什么 在 D 中帮助模板元
  • Android:自定义视图的默认属性

    我有一个扩展框架类之一的自定义视图 最多ViewAndroid 中的 s 为它们定义了一些默认属性 例如Button可点击 由以下设置android clickable true 如何为我的自定义视图提供应用程序范围的默认值 我这样解决了我
  • 如何在文件更改时更新 UI

    你好 我正在使用几个 Excel 文件构建一个闪亮的仪表板 我在框的页脚中插入了这些文件的链接 我想refresh更改我的 Excel 文件中的某些内容时的闪亮仪表板 我不想每次都运行整个 R 代码 文件内容更改后如何重新渲染输出 这里有一
  • ColladaLoader 和 ProgressCallback

    实施的正确方法是什么加载栏 in ColladaLoader 源代码显示加载器采用三个参数 其中一个是progressCallback progressCallback total length loaded request respons
  • pyglet on_draw 事件仅在鼠标移动时发生

    我有一个奇怪的问题 当 pyglet 应用程序启动时 它只绘制 1 2 帧然后冻结 on draw 事件停止发生 但每次我移动鼠标或按键时 on draw 事件也会调度 简而言之 我必须移动鼠标才能使我的 pyglet 应用程序基本工作 这
  • NHibernate.MappingException:没有持久化:XYZ

    现在 在你说之前 我did谷歌和我的hbm xml file is嵌入式资源 这是我调用的代码 ISession session GetCurrentSession var returnObject session Get
  • 使用 C 从文本文件中打印出数组

    我正在尝试创建一个代码 它从纺织品中读取数据 然后将数据存储到内存中 打印到屏幕上以便用户可以读取它 但它仍然保存到内存中 以便您可以将其用于其余部分节目的 这是纺织品的样品 75 nevermind nvm not much nm no
  • 在Java中获取文件/目录所有者的名称[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 OSX 上的 Java 中获取文件所有者的名称 https stackoverflow com questions 3096805 how do i get the name of a fil
  • 类型错误:canvas.getContext 不是函数

    我正在尝试使用 canvas 元素在 Javascript 中为跟随光标的球设置动画 我将对画布对象的引用传递给名为 followMouse 的函数 但是当我尝试获取其上下文时 firebug 给出了以下错误 类型错误 canvas get
  • C++ TR1 正则表达式 - 多行选项

    我认为 表示字符串的结尾 然而 下面的代码给出了 testbbbccc 作为结果 这对我来说非常令人惊讶 这意味着 实际上匹配行尾 而不是整个字符串的结尾 include
  • JUnit:4.8.1“找不到类”

    好吧 我和其他人一样 是 jUnit 的新手 并且很难让它正常工作 我搜索过论坛但提供了答案 我只是不明白 如果有人可以帮助我 我将不胜感激 让我提供基础知识 操作系统 Mac OS X 6 export JUNIT HOME Develo
  • Listviewdefs 中的 SugarCRM Smarty 代码

    我正在尝试使用 Smarty PHP 在 SugarCRM 6 5 3 的 ListView custom modules Leads metadata listviewdefs php 中实现自定义功能 这工作正常 customCode
  • 方法返回类型以满足多个接口

    是否可以指定一个返回实现两个或多个接口的对象的方法 假设我们有以下接口 interface FooBar Foo Bar getFooBar interface Foo void doFoo inteface Bar void doBar
  • 如何从在线下载视频并将其存储在本地设备上,然后使用视频播放器在 Flutter 应用程序上播放视频?

    我想开发一个 flutter 应用程序 用户可以通过一个按钮从在线下载所有视频并将其存储在本地设备上 然后在 Flutter 应用程序上使用视频播放器离线播放这些视频 我通过资产视频做到了这一点 但如果我使用资产中的视频并构建应用程序 那么
  • 红宝石冻结方法

    def track for stat This is a hash with 2 elements of proc symbol gt send stat array gt send stat 0 stat 1 freeze stat cl