2016-07-04 3 views
1

In Ruby ist es möglich, auf die Eigenklasse (oder "Singleton-Klasse") eines Objekts zuzugreifen, indem Sie es erneut öffnen. Dies ist besonders nützlich für "private Klassenmethoden" zu definieren:Wie greife ich auf die Eigenklasse eines Objekts in Crystal zu?

class Foo 
    class << self 
    private 
    def declarative_method_name 
    end 
    end 

    declarative_method_name 
end 

# Foo.declarative_method_name => ERROR! 

jedoch in Crystal ist dies nicht Syntax:

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

    class << self 
     ^

Gibt es eine anderen (oder in der Tat überhaupt) Weg, dies in Crystal erreichen zur Zeit ?

Antwort

5

In Ruby gibt es derzeit keine Eigenklasse oder Singleton-Klasse in Ruby (vorausgesetzt, es gibt Object#singleton_class).

jedoch Klassenmethoden zu definieren und sie auf der Ebene der Klassen Aufruf wird unterstützt:

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

    declarative_method_name 
end 

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

Das hier def self. Konstrukt durch den Compiler spezialisiert und es gibt keine darunter allgemeineren Begriff, noch nicht.

+0

danke, das macht Sinn :) – andrewdotnich

0

Wie würdest du die neue Methode eines Super-Kurses so gestalten, dass sie privat bleibt, während ihre Unterklassen öffentlich bleiben?

class Foo 
    private self.new; end 
end 
class Bar < Foo 
end 
Bar.new #=> error: private method 'new' called for Foo:Class 
+0

Gut, egal. Crystal macht etwas Seltsames. Anscheinend müssen Sie Foo's 'self.new' Methode einfach' super' hinzufügen. – trans

Verwandte Themen