如何在Crystal中访问对象的本征类?

and*_*ich 1 crystal-lang

在Ruby中,可以通过重新打开来访问对象的本征类(或"单例类").这对于定义"私有类方法"特别有用:

class Foo
  class << self
    private
    def declarative_method_name
    end
  end

  declarative_method_name
end

# Foo.declarative_method_name => ERROR!
Run Code Online (Sandbox Code Playgroud)

但是,在Crystal中这不是语法:

Syntax error in ./test.cr:2: expecting token 'CONST', not '<<'

  class << self
        ^
Run Code Online (Sandbox Code Playgroud)

目前还有另一种(或实际上是任何)方法在Crystal实现这一目标吗?

Jon*_*Haß 5

有没有eigenclass,或者更通常被称为单例类Ruby的这些日子里(因为有Object#singleton_class),在水晶.

但是,支持定义类方法并在类级别调用它们:

class Foo
  private def self.declarative_method_name
    puts "hey"
  end

  declarative_method_name
end
Run Code Online (Sandbox Code Playgroud)

https://carc.in/#/r/1316

def self.这里的构造由编译器专门化,并且它下面没有更一般的概念.