Bu yöntemi bir kapatma olmadan kullanmaya çalışıyorum
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!!!!')
}
ancak çalıştırdığımda aşağıdaki hatayı alıyorum:
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)
Neyi yanlış yapıyorum?
Çünkü dört argümanlı bir yönteme üç argüman geçiriyorsunuz. Ayrıca, geçirilen kapanışı kullanmıyorsunuz.
Eğer kaynak
içeriğinin üzerinde yapılacak işlemleri belirtmek istiyorsanız, o zaman bir closure kullanın. Şöyle bir şey olabilir:
def copyAndReplaceText(source, dest, closure){
dest.write(closure( source.text ))
}
// And you can keep your usage as:
copyAndReplaceText(source, dest){
it.replaceAll('Visa', 'Passport!!!!')
}
Dizeleri her zaman değiştirecekseniz, yöntem imzanızda zaten belirtildiği gibi her ikisini de geçirin:
def copyAndReplaceText(source, dest, targetText, replaceText){
dest.write(source.text.replaceAll(targetText, replaceText))
}
copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!')
Bu hatayı, yönteme aktardığınız nesneler sırasızsa da alabilirsiniz. Başka bir deyişle, yönteminizin sırasıyla bir dize, bir tamsayı ve bir tarih aldığını varsayalım. Önce bir tarih, sonra bir dize, sonra da bir tamsayı geçirirseniz aynı hata mesajını alırsınız.