gpt4 book ai didi

ruby - Ruby 类名被大写的真正原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:43 25 4
gpt4 key购买 nike

好的,所以每个人都知道大写的标识符在 Ruby 中被视为“常量”。

但是,可以为常量分配一个新值,所以下面的工作

class A
def self.hi; "hi"; end
end
class B
def self.hi; "ho"; end
end
A.hi # => "hi"
B.hi # => "ho"
A = B
# warning: already initialized constant A
# => B
A.hi # => "ho"

并且也确实分配给小写标识符工作:

a = B
a.hi # => "ho"

但是,在所有情况下,内部名称都设置为“B”,新标识符名称也仅引用“B”。

但是,如果标识符具有小写名称在技术上是可以接受的,那么为什么要对类的内部名称进行这种限制呢?它不可能是恒定的,因为它不是恒定的;所以另一个原因可能是小写标识符具有不同的范围。但是然后:为什么不使用小写作用域的类呢?

我想知道因为解析器甚至允许使用 unicode 等格式的方法名称,所以对于类来说它受到如此多的限制似乎很奇怪。

最佳答案

正如您所说,类的名称是它被分配给的第一个常量的名称。您只能将常量与 class 关键字一起使用,因为已决定 class 关键字只能用于创建命名类。

理由可能是允许局部变量会混淆用户,谁会使用 class lowercase_class_name,不知道小写和大写标识符之间的区别,然后想知道为什么类名在任何地方都不可见(即为什么 def foo() lowercase_class_name.new end 不起作用。

通过使用默认方式来创建特定于常量的类,以这种方式定义的类将随处可见,并且至少有一个建议,即与该名称关联的值不应更改(即否则您会收到警告)。

如果需要,知道自己在做什么的人仍然可以local_variable = Class.new { ... }

关于ruby - Ruby 类名被大写的真正原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993996/

25 4 0
文章推荐: Ruby,为什么 FeedNormalizer 的使用会破坏 Classifier::CRM114
文章推荐: angular - 无法访问在 ubuntu 服务器上的端口上运行的项目
文章推荐: ruby-on-rails - Rails - 将集合传递给 will_paginate 的布局?
文章推荐: python - 如何访问这个没有 id 的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com