Saya mencoba menggunakan metode ini tanpa penutupan
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!!!!')
}
tetapi ketika saya menjalankannya saya mendapatkan kesalahan berikut:
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)
Apa yang saya lakukan salah?
Karena Anda mengoper tiga argumen ke metode empat argumen. Juga, Anda tidak menggunakan closure yang dilewatkan.
Jika Anda ingin menentukan operasi yang akan dibuat di atas konten source
, maka gunakan closure. Ini akan menjadi seperti ini:
def copyAndReplaceText(source, dest, closure){
dest.write(closure( source.text ))
}
// And you can keep your usage as:
copyAndReplaceText(source, dest){
it.replaceAll('Visa', 'Passport!!!!')
}
Jika Anda akan selalu menukar string, oper kedua-duanya, seperti yang sudah dinyatakan oleh method signature Anda:
def copyAndReplaceText(source, dest, targetText, replaceText){
dest.write(source.text.replaceAll(targetText, replaceText))
}
copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!')
Anda juga bisa mendapatkan error ini jika objek yang Anda oper ke metode tidak sesuai urutan. Dengan kata lain, katakanlah metode Anda mengambil, secara berurutan, string, integer, dan tanggal. Jika Anda mengoper tanggal, lalu string, lalu integer, Anda akan mendapatkan pesan error yang sama.