Considérez un code comme celui-ci :
module Foo
# returns a copy of self
# @return [ ___ ]
def returns_new_self
self.class.new
end
end
class Bar
include Foo
end
class Zap
include Foo
end
Avec ça, Bar.new.returns_new_self
retournera un autre Bar
et il en va de même pour Zap.new.returns_new_self
.
Je veux avoir retuns_new_self
YARD-documenté avec un type de retour.
Ce serait bien si je pouvais faire quelque chose comme @return [Self]
comme le Self
dans Rust.
Puis-je faire quelque chose de similaire ?
EDIT : (en réponse à @spickermann)
Le code actuel est le suivant :
module MultipleItemBehaviour
# @return [Integer]
def count; not_implemented end
# @return [Enumerator]
def each_count
return enum_for(:each_count) unless block_given?
count.times do
yield single_item
end
end
# @return [ __SELF__ ]
def single_item; not_implemented end
private def not_implemented
raise NotImplementedError, "message"
end
end
class SomeItemWhichIsABunch
include MultipleItemBehaviour
attr_reader :count
def initialize(count)
@count = count
end
def single_item
self.class.new(1)
end
end
SomeItemWhichIsABunch.each_count.take(5).map(&:something)
Je comprends que cela s'écarte un peu de la POO (il est préférable de diviser cet élément en un conteneur et les éléments concrets),
mais comme c'est un tas de choses identiques, et que c'est déjà la façon dont c'est stocké dans la base de données, j'ai décidé que je voulais retourner un énumérateur comme ceci.
EDIT 2 : Je passe le --embed-mixin
option vers la cour. Le résultat actuel dans le document includer Class est le suivant : (désolé pour le nom de module différent)