方法如何知道它被调用的位置?

时间:2016-10-11 08:32:24

标签: groovy closures

我不知道如何用文字描述我的问题,所以我尝试使用代码:)

Gebish,Groovy的selenium实现,这样做:

$("#myForm").with {
    $("input").value("abc")
}

这看起来非常像jQuery,它几乎做同样的事情。 在此示例中,我将给定表单中> 中的每个输入值设置为“abc”。但是Groovy如何知道我是以哪种形式出现的?或者换句话说,带有输入$方法如何知道它的调用位置以及它与谁有关系?

我知道.with { ... }it变量,而$("input")正在“查看”它。如果我创建自己的方法$能够看到那个 it 而不告诉方法有那个 it ,那会是什么样子?因为它是$("input").value("abc")而不是$("input", it).value("abc")

我会自己研究,但遗憾的是我甚至不知道怎么称呼我所解释的。

我想它可以用于查看堆栈跟踪,但我知道这将是最糟糕的事情:D

1 个答案:

答案 0 :(得分:2)

当您使用with时,调用的任何方法或在闭包内访问的属性都会针对调用with的对象进行解析。这是一个非常简单的例子:

'12345'.with {
  // prints 5, because the string that "with" is called on has 5 characters
  println size()  
}

因此上面的代码在功能上与

相同
println '12345'.size()

所以希望你的问题的答案现在应该是显而易见的

  

Groovy如何知道我的形式是什么?

因为这个

$("#myForm").with {
    $("input").value("abc")
}

实际上是:

$("#myForm").$("input").value("abc")