2
A
回答
3
它的範圍不同。當您爲不帶「def」或其他類型的變量賦值時,在Groovy腳本中,它將被添加到腳本的全局變量「binding」中。這意味着它可以通過腳本中的所有函數進行訪問。這很像是你在腳本的頂部定義了變量。
如果在腳本上有多個線程正在進行操作,則可能會發生意外的行爲。
def a = {
x = 1
println x
}
def b = {
x = 2
println x
}
new Thread(a).start()
new Thread(b).start()
...可能會產生兩個,兩個或兩個混合。
相比之下,使用 「高清」 讓一個局部變量:
def a = {
def x = 1
println x
}
def b = {
def x = 2
println x
}
new Thread(a).start()
new Thread(b).start()
...總是打印1和2,以任意順序。
1
這是一個很好的問題,但它更多的是一個Groovy問題。
據我所知,定義一個沒有def
關鍵字的變量將從腳本中工作,但如果您是在類方法中則不能。從這個實施例blog post:
class MyTest {
def testMethod() {
y = 3
println y
}
}
t = new MyTest()
t.testMethod()
可變t
將毫無問題地定義,但y
定義將拋出異常。
這意味着在我們的上下文中(Jenkins管道),您始終可以在不使用def
關鍵字的情況下定義變量,因爲您始終處於腳本上下文中,並且變量將被綁定到腳本。但是,我認爲使用def
關鍵字是一種很好的做法,因爲它表明您知道何時實例化變量,並且還可以避免重複變量定義的某些問題(如果使用def
關鍵字定義它們,至少編譯將失敗定義相同的變量兩次)。
最後,從Groovy documentation:
當在Groovy使用閃避,實際類型持有人是Object(這樣你就可以 分配任何物體都以def定義的變量,並且如果返回任何一種 對象方法聲明返回def)。
所以你可能想具體指定你正在定義的變量的類型。你的情況,你可以定義cwd
爲:
String cwd = pwd()
它會禁止你做這樣的事情:
def cwd = pwd()
cwd = 1000 // Valid code
String cwd2 = pwd()
cwd2 = 1000 // Will fail compilation
相關問題
- 1. 指定URL時「abc // def // ghi」和「abc/def/ghi」有什麼區別
- 2. def和lambda'd val有什麼區別?
- 3. Groovy:定義一個沒有「def」的變量與使用錨定有什麼區別?
- 4. `def self.myMethod`和`def myMethod`有什麼區別嗎?
- 5. def func(var)和def func =(var)有什麼區別?
- 6. 使用./configure(php)--disable- [name]和--without- [name]之間有什麼區別?
- 7. TARGET_ARCH和TARGET_MACH變量有什麼區別?
- 8. 變量的=和=>有什麼區別?
- 9. definePlugin和env變量有什麼區別?
- 10. 對象和變量有什麼區別?
- 11. 存在和定義有什麼區別?
- 12. 在聲明變量時使用「」和「'和()有什麼區別?
- 13. 使用def在scala中定義變量
- 14. 參考變量和常量指針變量有什麼區別?
- 15. 變量===常數和常量===變量有什麼區別
- 16. 用戶定義函數和聲明變量有什麼區別? C++
- 17. 使用結構指針和結構變量有什麼區別?
- 18. 在Scala REPL中使用`val`和`def`定義函數的區別?
- 19. 綁定變量和我用&&輸入的變量有什麼區別?
- 20. 非局部變量和全局變量有什麼區別?
- 21. C:指針=變量和指針=變量有什麼區別?
- 22. PL/SQL變量和非PL/SQL變量有什麼區別?
- 23. 閱讀查詢變量和正文變量有什麼區別?
- 24. 靜態變量和全局變量(Java)有什麼區別?
- 25. 這些PHP變量有什麼區別?
- 26. 在tweepy streamListener中,「def on_data(self,data):」和「def on_status(self,status):」有什麼區別?
- 27. 「def ... = arg.foreach.println()」和「def ... = arg.foreach.println」之間的返回類型有什麼區別?
- 28. 鳳凰框架中的`def`和`defp`有什麼區別?
- 29. 綁定和調用有什麼區別?
- 30. 類別級別定義的類別變量和變量之間的區別是什麼
在groovy中,它表示變量的範圍。 def就像全局變量。 – chenchuk