当前位置: 首页 > 面试题库 >

调用方法表达式的参数不足

越新霁
2023-03-14
问题内容

在学习过程中,我遇到以下错误:

prog.go:18: not enough arguments in call to method expression JSONParser.Parse

在我的测试程序(https://play.golang.org/p/PW9SF4c9q8)中:

package main


type Schema struct {
}

type JSONParser struct {
}

func (jsonParser JSONParser) Parse(toParse []byte) ([]Schema, int) {
    var schema []Schema
    // whatever parsing logic
    return schema, 0 
}

func main() {
    var in []byte
    actual, err2 := JSONParser.Parse(in)
}

有人愿意帮助我继续前进吗?


问题答案:

不幸的是,您的错误有些令人误解。问题在于它是一个实例方法,您在调用它时就好像它是程序包作用域中的一个方法一样。

您需要这样的东西;

func main() {
    var in []byte
    jp := JSONParser{}
    actual, err2 := jp.Parse(in)
}

我猜该错误的措辞是这样的,因为接收器(函数名称左侧位置中的括号中的内容)的处理方式与在后台传递给函数的任何其他参数一样。

如果您希望像这样调用您的方法,那么定义将是正确的,func Parse(toParse []byte) ([]Schema, int)并且如果该定义位于被调用的包中,JSONParser那么这将是正确的语法。如果在与您的示例相同的包中定义了它,则只需将其命名为Parse(in)



 类似资料:
  • 上面写着编译错误 Employee::new、1L、“”、“ 无法解析构造函数。

  • 本文向大家介绍Java8使用lambda表达式调用静态方法,包括了Java8使用lambda表达式调用静态方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式允许您将功能作为参数传递给方法。您还可以使用lambda表达式调用现有的方法。 方法引用是简单的、易于阅读的lambda表达式,可以通过lambda表达式中的名称调用/引用现有的方法。可以使用方法引用引用类中定义的静态

  • 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。

  • 我有一个lambda表达式,我希望能够传递和重用。代码如下: 这里的关键是,我希望能够将我在这里使用的lambda表达式传递到调用此代码的方法中,以便可以重用它。lambda表达式是我的。查询方法。我假设我想使用Action或Func,但我不太确定它的语法是什么,或者它是如何工作的。谁能给我举个例子吗?

  • 我在@controllerAdvice中定义了一个@ModelAttribute(键),我在多个控制器方法中使用相同的模型属性作为方法参数,因为(键)在所有控制器中都可用。 我像这样在控制器类中添加属性(key)。 我想截取所有以作为方法参数的控制器方法。 我的方面文件看起来像这样。 但是我的服务器启动失败说 [tomcat:launch]由:java引起。lang.IllegalArgument

  • 6.4. 方法值和方法表达式 我们经常选择一个方法,并且在同一个表达式里执行,比如常见的p.Distance()形式,实际上将其分成两步来执行也是可能的。p.Distance叫作“选择器”,选择器会返回一个方法"值"->一个将方法(Point.Distance)绑定到特定接收器变量的函数。这个函数可以不通过指定其接收器即可被调用;即调用时不需要指定接收器(译注:因为已经在前文中指定过了),只要传入