类体可执行的意义是什么?

时间:2015-04-14 07:08:25

标签: ruby

类主体可执行,如下代码所示:

3.times do
  class C
    puts "hello"
  end
end

那有什么意义?我没有看到课堂的重要性 身体是可执行的。是因为我们需要顶部的代码 要执行的级别,还是能够返回值?如果这不是唯一的原因,是否有一个很好的例子来表明它是一个好主意?

2 个答案:

答案 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,它在运行时读取您的数据库结构,并使用其列信息来帮助设置代表每个表的类。