Scala REPL tab-complete мне врёт? - PullRequest
       20

Scala REPL tab-complete мне врёт?

4 голосов
/ 09 декабря 2010

С Scala 2.8.1, SBT 0.7.4, WebDriver HTMLUnit 2.6.В консоли SBT REPL ...

 scala> e.findElement[tab]

findElement                     findElementById                 findElementByLinkText           findElementByPartialLinkText
findElementByTagName            findElementByXPath              findElements                    findElementsById
findElementsByLinkText          findElementsByPartialLinkText   findElementsByTagName           findElementsByXPath

scala> e.findElementByXPath[tab]

def findElementByXPath(String): org.openqa.selenium.WebElement

scala> e.findElementByXPath("/td[0]")
<console>:12: error: value findElementByXPath is not a member of org.openqa.selenium.WebElement
       e.findElementByXPath("/td[0]")
         ^

([tab] s добавлены мной для иллюстрации завершения табуляции)

Итак, REPL сообщает, что findElementByXPath(String):WebElementсуществует на e, но когда я его вызываю, он не обнаруживается.Что дает?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Смотрите здесь:

scala> class X {
     |   def m1 = 1
     |   protected def m2 = 2
     |   private def m3 = 3
     | }
defined class X

scala> class Y extends X {
     |   def m4 = 4
     | }
defined class Y

scala> val x: X = new Y
x: X = Y@12524b0

scala> x.

asInstanceOf   equals         getClass       hashCode       isInstanceOf   m1             m2             m4
notify         notifyAll      toString       wait

Итак, m2 появляется, даже если вы не можете использовать его, потому что он защищен, и m4 появляется, даже если вы не можете использовать его (без приведения или сопоставления), потому что тип x равен X, а m4 относится к классу Y (фактический class, а не type из x).

Следующий вопрос: это намеренно? Ну, не совсем, но есть вещи более высокого приоритета, которые нужно исправить. Патчи приветствуются, конечно. : -)

3 голосов
/ 09 декабря 2010

Обратите внимание, что org.openqa.selenium.WebElement не имеет этих методов, но классы, реализующие его, как org.openqa.selenium.htmlunit.HtmlUnitWebElement, имеют.

Мне кажется, что завершение табуляции показывает все открытые (или защищенные; см. Ответ Даниэля) методы e class , но тип переменной - org.openqa.selenium.WebElementтаким образом, эти методы не могут быть вызваны.

...