类主体可执行,如下代码所示:
3.times do
class C
puts "hello"
end
end
那有什么意义?我没有看到课堂的重要性 身体是可执行的。是因为我们需要顶部的代码 要执行的级别,还是能够返回值?如果这不是唯一的原因,是否有一个很好的例子来表明它是一个好主意?
答案 0 :(得分:6)
有几个简单的例子:
它允许属性访问器等工作:
class Dog
attr_reader :name
end
attr_reader
和来自该系列的其他人只是在self
是类对象的上下文中执行的方法。它们不是声明;它们实际上是在执行类时执行的。因此,它取决于Ruby在定义类时调用方法的能力。
它允许条件定义:
class OptimisedClass
if defined? JRUBY_VERSION
def do_stuff
jruby_optimised_stuff
end
else
def stuff
c_optimised_stuff
end
end
end
答案 1 :(得分:1)
它使Ruby更加一致,作为一种语言,使类,模块和函数定义可执行。例如,您可以使用if
语句来决定是否定义类。这是一个例子,如果我们在JRuby下运行,我们只定义一个类:
if RUBY_ENGINE == 'jruby'
class SomeClass
end
end
如果你来自C ++或Java背景,你会认为类结构是在编译时定义的这个不变的东西,你只能用#ifdefs来控制它。但是在Ruby中,它可以使用实际的Ruby代码而不是某些预处理器来动态更改。
ActiveRecord是一种流行的Ruby ORM gem,它在运行时读取您的数据库结构,并使用其列信息来帮助设置代表每个表的类。