当我今天查看ActiveRecord源代码时,我偶然发现了这些行

name = -name.to_s

https://github.com/rails/rails/blob/2459c20afb508c987347f52148210d874a9af4fa/activerecord/lib/active_record/reflection.rb#L24

ar.aggregate_reflections = ar.aggregate_reflections.merge(-name.to_s => reflection)

https://github.com/rails/rails/blob/2459c20afb508c987347f52148210d874a9af4fa/activerecord/lib/active_record/reflection.rb#L29

-运算符在符号name上的作用是什么?

推荐答案

这是String#-@:

返回字符串的冻结副本,可能是预先存在的副本.

例子:

a = "foo"
b = "foo"

a.object_id #=> 6980
b.object_id #=> 7000

vs:

a = -"foo"
b = -"foo"

a.object_id #=> 6980
b.object_id #=> 6980

Ruby相关问答推荐

关键字if是什么对象类型/类?

在Ruby中按字母顺序对数组中的数组进行排序?

Ruby 按变量条件划分数组数组

在 Ruby 中为类添加实例变量

如何打开(读写)或创建允许截断的文件?

我在哪里可以找到积极开发的 Ruby lint 工具?

如何记录在 Ruby 程序中调用的每个方法?

如何在没有 Web 服务器的情况下从命令行执行 ruby​​ 模板文件 (ERB)?

我应该签入.ruby-gemset和/或.ruby-version吗?

是否有等效于 `Array::sample` 的哈希值?

如何在 ruby​​ 中针对正则表达式测试整个字符串?

Ruby 中方法名称的限制是什么?

错误数量的参数(1 代表 0)在 Ruby 中是什么意思?

项目目录的相对路径

如何使用 link_to Ruby on rails 添加确认消息

Ruby中的urldecode?

如果公司使用 C++、C# 或 Java 作为应用程序语言,为什么要学习 Perl、Python、Ruby?

在 Jekyll 中使用 Live Reload

什么是 Ruby 1.9 标准 CSV 库?

传递哈希而不是方法参数