2013-07-01 17 views
7

Próbuję użyć tej metody bez zamknięciajak naprawić groovy.lang.MissingMethodException: Brak podpisu metoda:

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!!!!') 
} 

ale kiedy go uruchomić pojawia się następujący błąd:

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) 

Co robię źle?

+2

Od noob in groovy: Miałem ten sam wyjątek, ale z innego powodu. Zdefiniowałem metodę później niż chciałem użyć na początku kodu. Kiedy go wymieniłem, zadziałało. – CsBalazsHungary

Odpowiedz

9

Ponieważ przekazujesz trzy argumenty do metody czterech argumentów. Ponadto nie używasz przekazanego zamknięcia.

Jeśli chcesz określić operacje, które mają zostać wykonane na zawartości source, użyj zamknięcia. To byłoby coś takiego:

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

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

Jeśli będzie zawsze wymieniać struny przechodzą zarówno jako podpis metody już stwierdza:

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

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

Dziękuję bardzo, to mój pierwszy raz z groovy, i potrzebuję pomocy, szybkie pytanie, czy używam kodu poniżej będę przekazywać 4 parametr w prawo? 'def copyAndReplaceText (źródło, dest targetText, ReplaceText) { dest.write (source.text.replaceAll (targetText, ReplaceText)) } źródło def = nowego pliku (" C: /geretd/resumebak.txt ') // Hello World def dest = new Plik (' C: /geretd/resume.txt ') // puste copyAndReplaceText (źródło, dest, "Visa", "paszport !!!!") ' – geretd

+0

Tak. 'copyAndReplaceText()' jest nazwą metody i podajesz cztery argumenty: 1. 'źródło', 2.' dest', 3. ''Visa'' i 4.'' Passport !!!! '' – Will

+2

Mam nadzieję, że lubisz groovy . Z przyjemnością pracuję z :-) – Will

0

Można również uzyskać ten błąd, jeżeli obiekty jesteś przejście do tej metody jest nieczynne. Innymi słowy powiedz, że twoja metoda pobiera w kolejności łańcuch, liczbę całkowitą i datę. Jeśli przekażesz datę, następnie ciąg, a następnie liczbę całkowitą, otrzymasz ten sam komunikat o błędzie.

Powiązane problemy