2013-07-01 3 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

От noob в groovy: у меня было то же исключение, но по разной причине. Я определил метод позже, чем я хотел использовать в начале кода. Когда я заменил его, он сработал. – 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 параметра правильно? 'Защита copyAndReplaceText (источник, приемник, targetText, ReplaceText) { dest.write (source.text.replaceAll (targetText, ReplaceText)) } источника DEF = новый файл (" C: /geretd/resumebak.txt ') // Hello World def dest = new Файл (' C: /geretd/resume.txt ') // blank copyAndReplaceText (источник, dest,' Visa ',' Passport !!!! ') ' – geretd

+0

Да. 'copyAndReplaceText()' является именем метода, и вы передаете четыре аргумента: 1-й источник, второй 'dest', 3-й' 'Visa'' и 4-й' 'Passport !!!! '' – Will

+2

Надеюсь, вам понравится groovy , Мне очень приятно работать с :-) – Will

0

Вы также можете получить эту ошибку, если объекты вы переход к методу не соответствует порядку. Другими словами, ваш метод берет по порядку строку, целое число и дату. Если вы передадите дату, затем строку, затем целое число, вы получите то же сообщение об ошибке.

Смежные вопросы