2013-03-13 9 views
25

Dokumentuję klasę Scala z overloaded methods. Jak mogę je rozróżnić, odwołując się do nich w komentarzach skaladoc? Na przykład, jeśli mamJak rozróżniać linki do metod w skaladoc?

/** 
* The most important method is [[Doc.foo]]. 
*/ 
object Doc { 
    def foo[A]: A = throw new UnsupportedOperationException; 
    def foo[A,B >: A](x: A): B = x; 
} 

i uruchomić sbt doc uzyskać

Doc.scala: 1: ostrzeżenie: Cel Link "Doc.foo" jest niejednoznaczna. Kilka (ewentualnie przeciążone) członków dopasować cel:

  • sposób foo[A,B>:A](x:A):B w obiekcie Doc [wybrany]
  • metodą foo[A]:Nothing w obiekcie Doc

za pomocą foo[A,B >: A] itp aby związek nie praca.

+1

Czy użycie '[[Doc.foo()]] 'działałoby? Wiem, że w języku C#, gdy istnieje niejednoznaczne odniesienie w dokumentacji, musisz użyć '()', gdy masz jedną metodę bez parametrów lub przeliteruj * typy argumentów *, np. 'foo (ciąg)'. Może to jest podobne tutaj ... –

+0

@ Trustme-I'maDoctor To nie działa, narzeka z: _warning: Nie można znaleźć żadnego członka do połączenia z "Doc.foo()" ._ –

+0

PR na https: // github.com/scala/docs.scala-lang dodanie dokumentacji na ten temat do http://docs.scala-lang.org/overviews/scaladoc/for-library-authors.html byłoby mile widziane –

Odpowiedz

20

Poniższe fragmenty wyglądają tak, jak w Scali 2.10.

/** 
* The most important method is [[Doc.foo[A]:A*]]. 
*/ 

I tu jest jakaś wskazówka scaladoc daje mi:

[warn] Quick crash course on using Scaladoc links 
[warn] ========================================== 
[warn] Disambiguating terms and types: Prefix terms with '$' and types with '!' in case both names are in use: 
[warn] - [[scala.collection.immutable.List!.apply class List's apply method]] and 
[warn] - [[scala.collection.immutable.List$.apply object List's apply method]] 
[warn] Disambiguating overloaded members: If a term is overloaded, you can indicate the first part of its signature followed by *: 
[warn] - [[[scala.collection.immutable.List$.fill[A](Int)(⇒A):List[A]* Fill with a single parameter]]] 
[warn] - [[[scala.collection.immutable.List$.fill[A](Int,Int)(⇒A):List[List[A]]* Fill with a two parameters]]] 
[warn] Notes: 
[warn] - you can use any number of matching square brackets to avoid interference with the signature 
[warn] - you can use \. to escape dots in prefixes (don't forget to use * at the end to match the signature!) 
[warn] - you can use \# to escape hashes, otherwise they will be considered as delimiters, like dots. 
+9

Uważam to za wstrętne, że ScalDoc może nie rozwiązuje nazw poprzez import. Nie chcę używać w pełni kwalifikowanych nazw w komentarzach do dokumentacji. –

+0

Wygląda na to, że podpowiedź jest wyświetlana tylko wtedy, gdy używam bezpośrednio skaladoc.Użyłem sbt, który tego nie pokazał. –

+0

@Randall Schulz To powinno zostać naprawione zgodnie z tym zagadnieniem: https://issues.scala-lang.org/browse/SI-3695 – EECOLOR

7

znalazłem rozwiązanie (podobno) unikalne rozwiązanie dla złożonych podpisów, studiując DOC scaladoc.

  • Nie używaj miejsca w podpisie
  • Użyj argumenty wymienić
  • dla typów argumentów, a także rodzajów powrotów poprzedzić wszystkie kropki z jednym backslashem \
  • Korzystanie z gwiazdą * Pod koniec podpisu
  • Skorzystaj z kompletnego podpisu (w zależności od proponowanych dwuznacznych podpisów). Ten krok jest opcjonalny, może być w stanie zatrzymać podpis wcześniej, tak długo, jak skończyć z *

Przykład:

package org.my.stuff 

class ReturnType 

object Foo { 
    class Bar { 
    def lara(s: String): String = ??? 
    def lara(s: Foo.Bar): ReturnType= ??? 
    } 
} 

/** [[org.my.stuff.Foo$.Bar.lara(s:org\.my\.stuff\.Foo\.Bar):org\.my\.stuff\.ReturnType* The link to the right lara method]] 
    */ 
object DocumentFooBarBingComplex { 
} 
+0

"Nie używaj spacji w podpisie" - Co jeśli istnieje niejawny parametr? –

+0

Niestety, to by nie zadziałało. Możesz spróbować dodać \ przed spacją lub upewnić się, że nie musisz pisać do niejawnych parametrów, aby ujednoznacznić swój kod. –

7

nadal jestem zaskoczony, jak trudno jest aby to działało i brak dokumentacji dla samego skaladoc. Postanowiłem przeszukać bazę kodów SCALA w nadziei na kilka użytecznych przykładów. Najlepsze, które znalazłem, były w https://github.com/scala/scala/blob/2.12.x/test/scaladoc/resources/links.scala. Mam nadzieję, że jest to przydatne dla kogoś, kto się z tym spotka.

+0

Wreszcie przykład, z którego mogę skorzystać. Dzięki. –

Powiązane problemy