You need to enable JavaScript to run this app. Ruby中对字符串前加短横线未实现对象冻结的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中对字符串前加短横线未实现对象冻结的问题咨询

问题原因分析:运算符优先级错误

你遇到的问题本质是Ruby运算符优先级和执行顺序不符合你的预期,和-前缀冻结字符串的语法本身无关:

  • Ruby中方法调用的优先级高于一元减号运算符,你写的-"fdsa".object_id实际执行逻辑为:
    1. 先创建字符串字面量"fdsa"
    2. 调用该字符串的object_id方法,得到对应的整数返回值
    3. 对这个整数执行一元减运算,全程没有触发-前缀针对字符串的冻结逻辑
  • 你两次执行代码时,每次都会创建新的"fdsa"字符串实例,拿到的自然是不同的object_id,和冻结功能完全没有关系。

而"asdf".freeze.object_id的执行顺序符合预期:先创建"asdf"字符串、调用freeze方法返回冻结后的同个对象,再调用object_id,相同字面量的冻结字符串会被Ruby复用,因此两次返回的id一致。


正确测试写法

给-"fdsa"部分加上括号,保证先执行字符串冻结逻辑再拿id:

(-"fdsa").object_id
(-"fdsa").object_id

执行后两次输出的object_id完全相同,符合冻结字符串复用的预期。

内容的提问来源于stack exchange,提问作者NonCreature0714

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:54:04