45

我正在尝试在没有关闭的情况下使用此方法

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)

我究竟做错了什么?

4

7 回答 7

26

因为您将三个参数传递给一个四参数方法。此外,您没有使用传递的闭包。

如果要指定要在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!!!!')
于 2013-07-01T18:37:48.033 回答
11

帮助其他寻虫者。我有这个错误,因为该功能不存在。

我有一个拼写错误。

于 2018-09-21T19:31:46.003 回答
6

就我而言,只是我有一个与函数同名的变量。

例子:

def cleanCache = functionReturningABoolean()

if( cleanCache ){
    echo "Clean cache option is true, do not uninstall previous features / urls"
    uninstallCmd = ""
    
    // and we call the cleanCache method
    cleanCache(userId, serverName)
}
...

稍后在我的代码中,我具有以下功能:

def cleanCache(user, server){

 //some operations to the server

}

显然 Groovy 语言不支持这一点(但 Java 等其他语言支持)。我刚刚将我的函数重命名为executeCleanCache它并且它工作得很好(或者你也可以重命名你的变量任何你喜欢的选项)。

于 2020-06-22T09:45:42.587 回答
2

如果您传递给该方法的对象乱序,您也可能会收到此错误。换句话说,你的方法按顺序接受一个字符串、一个整数和一个日期。如果您传递一个日期,然后是一个字符串,然后是一个整数,您将收到相同的错误消息。

于 2017-08-22T13:19:22.640 回答
2

这也可能是因为您可能已经给出了所有字母都小写的类名,这是 groovy(知道版本 2.5.0)不支持的。

类名 - 接受用户但不接受用户。

于 2018-06-04T09:02:09.770 回答
0

就我而言,问题是我在文件中注释了 firebase 依赖项,build.gradle但仍在调试构建类型中使用它:

firebaseCrashlytics {
   mappingFileUploadEnabled true
}

只需对其进行评论以使其正常工作。

于 2021-08-10T14:18:43.297 回答
0

这是 ionic/android 应用程序的主要问题之一

请按照以下步骤操作。

  1. 从根文件夹中删除/删除节点模块
  2. npm卸载cordova-android
  3. npm install cordova-android@10.1.1
  4. 现在使用以下方法删除 android 平台: ionic cordova rm platform android
  5. 现在添加平台: ionic cordova platform add android
  6. 构建安卓项目:离子科尔多瓦构建安卓

问题将得到解决

于 2022-02-23T06:57:18.847 回答