ruby-on-rails - ruby 中的案例类

标签 ruby-on-rails ruby class

<分区>

出于学术原因,我试图在 Ruby 中实现 case_class。 我已经读过这个问题Redefining "class" keyword in Ruby

我很难理解为什么在模块中使用 def case_class。为什么 case_class 有两个定义?

答案的作者说这个“foo_immutable = Foo_immutable.new”有效, 使用相同的代码和 irb 我得到

NameError: uninitialized constant Foo_inmutable
from (irb):3
from -e:1:in `load'
from -e:1:in `<main>'

为什么会这样?我应该如何初始化常量?

谢谢!

最佳答案

首先,一个类是类Class的一个实例,而Class继承了Module。例如:

class A
end

我们定义了一个类A,它是class,所以A是Class的一个实例。

由于A是Class的一个实例,所以它得到了Class中所有的实例方法。又因为Class继承了Module,而Module有这个实例方法“case_class”,所以,A得到了方法“case_class”。

我们可以这样调用:A.case_class。这就是为什么我们在模块中定义了“case_class”方法:为了让所有的类都有这个方法。

其次,这两个方法不需要具有相同的名称,第二个调用第一个,通过 self.class.case_class(name, superclass, &blk)。

关于ruby-on-rails - ruby 中的案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43576396/

相关文章:

ruby-on-rails - rails 3.1,选择题考试,怎么设计?

ruby-on-rails - 在 Rails App Heroku 中发送邮件

ruby-on-rails - 更新时唯一性的 rails 验证

ruby - 如何从 Ruby 1.8 中的特定字符索引开始匹配正则表达式?

javascript - 如何在 Rails 中显示 PDF?

ruby-on-rails - 安装 posix spawn 时出现 UTF-8 设置问题

c++ - 直接和复制构造函数

c++ - 使用C++20 Concept约束模板参数

Java - 如何让类 1 和类 2 互相了解?

css - 在公共(public)页面和管理仪表板之间拆分基本样式表