2013-07-01 66 views
7

我試圖用這個方法沒有關閉如何解決groovy.lang.MissingMethodException:法無簽名:

def copyAndReplaceText(source, dest, targetText, replaceText){ 
    dest.write(source.text.replaceAll(targetText, replaceText)) 
} 

def source = new File('C:/geretd/resumebak.txt') //Hello World 
def dest = new File('C:/geretd/resume.txt') //blank 

copyAndReplaceText(source, dest){ 
    it.replaceAll('Visa', 'Passport!!!!') 
} 

但是當我運行它,我得到以下錯誤:

groovy.lang.MissingMethodException: No signature of method: ConsoleScript3.copyAndReplaceText() is applicable for argument types: (java.io.File, java.io.File, ConsoleScript3$_run_closure1) values: [C:\geretd\resumebak.txt, C:\geretd\resume.txt, ...] 
Possible solutions: copyAndReplaceText(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object) 

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) 

at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) 

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) 

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 

我做錯了什麼?

+2

從groovy的noob:我有同樣的例外,但出於不同的原因。我在代碼的開頭定義了比我想要使用的方法更晚的方法。當我替換它時,它工作。 – CsBalazsHungary

回答

9

因爲您將三個參數傳遞給四個參數的方法。此外,您沒有使用傳遞的閉包。

如果您想指定要在source內容上進行的操作,請使用閉包。這將是這樣的:

def copyAndReplaceText(source, dest, closure){ 
    dest.write(closure(source.text)) 
} 

// And you can keep your usage as: 
copyAndReplaceText(source, dest){ 
    it.replaceAll('Visa', 'Passport!!!!') 
} 

如果你總是會掉串,同時傳遞,作爲方法的簽名已經指出:

def copyAndReplaceText(source, dest, targetText, replaceText){ 
    dest.write(source.text.replaceAll(targetText, replaceText)) 
} 

copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!') 
+1

非常感謝,這是我第一次與groovy,我需要幫助,快速的問題,如果我使用下面的代碼我會傳遞4參數嗎? 'DEF copyAndReplaceText(源,DEST,targetText,replaceText){ dest.write(source.text.replaceAll(targetText,replaceText)) } DEF源=新的文件(「C:/geretd/resumebak.txt ')// Hello World def dest = new File('C:/geretd/resume.txt')//空白 copyAndReplaceText(source,dest,'Visa','Passport !!!!')' – geretd

+0

是。 'copyAndReplaceText()'是方法名,並且你傳遞了四個參數:第一個'source',第二個'dest',第三個''Visa''和第四個''Passport !!!!'' – Will

+2

我希望你喜歡groovy 。我很高興能與之合作:-) – Will

0

您還可以,如果你的對象得到這個錯誤傳遞給該方法是無序的。換句話說,你的方法依次取得一個字符串,一個整數和一個日期。如果你傳遞一個日期,那麼一個字符串,然後一個整數,你會得到相同的錯誤信息。

相關問題