2016-09-15 2 views
0

ich eine Eigenschaft haben, das ein anderes Merkmal implementiert:Einlochen Anforderung nach Art eines Mitglieds eines Merkmals Implementierung

trait RandomAccessIterator : Sub + VariousOthers {} 

Wie gebe ich, dass für alle Implementierungen dieses Merkmal, das Ergebnis der Subtraktion (Die Output Art innerhalb Sub) muss von einem bestimmten Typ sein, wie isize? Wenn ich eine generische Funktion schreibe, die Objekte verwendet, die diese Eigenschaft implementieren, weiß ich (und noch wichtiger, der Compiler weiß), dass das Ergebnis A - B vom Typ isize ist.

+1

Does 'Merkmal RandomAccessIterator: Sub + VariousOthers + Sized {}' nicht funktionieren? Sie haben keinen Code zur Verfügung gestellt, der zeigt, wie * das, was Sie bereits versucht haben *, fehlschlägt. Ich würde mehr von jemandem mit diesem 70k Ruf erwarten :-(. – Shepmaster

+0

@Shempmaster: Ja, das funktioniert. Danke. Ich bin mir nicht sicher, wie das Zeigen meiner gescheiterten Versuche Ihnen helfen würde, die Frage zu beantworten. Dies ist eine Syntax, die ich war mir vorher nicht bewusst. Ich könnte hundert Rätsel auf die Syntax werfen. Wie würde Ihnen das helfen? –

+3

Die fehlgeschlagenen Versuche hätten vermutlich Code gehabt, der zu funktionieren begann, wenn die Anforderung erfolgreich implementiert wurde. Das wäre nützlich gewesen um zu bestätigen, dass meine Vermutung tatsächlich funktioniert hat. Außerdem wird [es wird erwartet, dass Sie zeigen, dass Sie Mühe aufgewendet haben, bevor Sie eine Frage stellen] (http://meta.stackoverflow.com/q/261592/155423). Das schließt Ihren eigenen Code ein Versuche, aber auch die Suche, die du hier auf SO und anderswo im Internet gemacht hast. Ohne all das gehen die Fragen an "code broken. du reparierst?" Siehe auch: [MCVE]. – Shepmaster

Antwort

2
trait RandomAccessIterator : Sub<Output = isize> + VariousOthers {} 

Als associated types für trait objects with associated types im Abschnitt in The Rust Programming Language Kapiteln über diskutiert:

Die N=Node Syntax ermöglicht es uns, eine konkrete Art zu schaffen, Node, für die N Typ-Parameter. Gleiches mit E=Edge. Wenn wir diese Einschränkung nicht bereitstellen würden, könnten wir nicht sicher sein, welche impl mit diesem Merkmalobjekt übereinstimmen soll.

Obwohl dies kein Merkmalobjekt ist, gilt die gleiche Syntax. Die meisten Leute laufen in diese when using operators like Mul,

Verwandte Themen