在groovy中可以使用默認值命名參數嗎?我的計劃是製作一種對象工廠,爲了獲得具有默認值的對象,可以根本不調用任何參數。此外,我需要的功能顯式設置對象的任何參數。例如,我相信這對Python關鍵字參數是可能的。在groovy中使用默認值命名參數
我試圖用現在的代碼是一樣的東西下面
// Factory method
def createFoo(name='John Doe', age=51, address='High Street 11') {
return new Foo(name, age, address)
}
// Calls
Foo foo1 = createFoo() // Create Foo with default values
Foo foo2 = createFoo(age:21) // Create Foo where age param differs from defaut
Foo foo3 = createFoo(name:'Jane', address:'Low Street 11') // You get the picture
// + any other combination available
是我的工作會有的參數有更多的真正的應用程序,從而有更多的組合需要。
感謝
UPDATE:
工廠方法我計劃是用於測試目的。無法真正觸及實際的Foo類,特別是它不是默認值。
@dmahapatro和@codelarks answere在使用Map作爲參數給我一個可能的解決方案的想法有一個好點。我可以用想要的默認值創建一個映射並覆蓋所需的值,並將其傳遞給工廠方法。這可能會完成這項工作,除非我有更好的方法,否則我會繼續這樣做。
我現在下面
defaults = [ name:'john', age:61, address:'High Street']
@ToString(includeFields = true, includeNames = true)
class Foo {
// Can't touch this :)
def name = ''
def age = 0
def address = ''
}
def createFoo(Map params) {
return new Foo(params)
}
println createFoo(defaults)
println createFoo(defaults << [age:21])
println createFoo(defaults << [ name:'Jane', address:'Low Street'])
注方法: leftShift操作(< <)修改了原來的地圖,所以在上面的例子中年齡將是最後的方法調用21爲好。在我的情況下,這不是一個問題,因爲每次在安裝方法中都可以新建默認值映射。
不這樣做。在這種情況下,'defaults'保持狀態。使其成爲本地。查看我的更新。 – dmahapatro
我確實意識到這一點,因此我的更新中的筆記。無論如何,使用函數本地地圖作爲默認值是一種更好的方法。謝謝你的提示。 – kaskelotti