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

通过变量访问函数

莘羽
2023-03-14
问题内容

我刚刚开始学习Go,有些事情引起了我的注意。

功能如下:

delete(map, "Answer") // for maps
append(slice, 0) // for slices
len(slice), cap(slice) // again for slices

等等。作为来自C语言的人,我想知道:

1)是否可以通过变量本身来调用这些函数(如中所述map.delete("Answer"))?

2)这是一种常见的做法(定义泛型函数并让其找出类型及其应执行的操作),还是仅用于内置类型。例如,如果我要定义自己的类型,例如MyCoolLinkedList,是否应该len在类型内定义和附加函数,并将其命名为

list := new(MyCoolLinkedList)
list.len()

还是应该定义一个接收列表的函数,例如:

len(list)

问题答案:

1-您不能将内置方法“附加”到类型或值上,例如

m := map[int]string{1: "one"}
m.delete(1)

是一个编译时错误,可以轻松验证。

2-
Go没有泛型。但是为了缓解“痛苦”,它提供了一些内置函数,可以接受不同类型的值。它们是内置的,因为(如上所述)由于缺少泛型,它们需要编译器的帮助才能接受不同类型的值。有些人还接受类型而不是表达式作为第一个参数(例如make([]int, 1)),这也是您不能创建的。内置函数没有标准的Go类型,它们只能出现在调用表达式中。

您不能创建接受不同类型值的函数。话虽如此,当您创建自己的类型并为其创建“函数”时,建议将其声明为方法而不是辅助函数。就像“功能”在您的具体类型上运行一样,无论如何您都不能将其用于其他类型。

因此,将其声明为方法是有意义的,然后您可以更“优雅地”调用它,例如

value.Method()

作为一种方法,如果您需要实现一个接口,则也“算在内”
该类型的方法集,例如,在您需要实现一个接口的情况下,能够对列表进行排序是MyCoolLinkedList有意义的,例如sort.Interface,这需要一个Len() int方法。

在辅助函数上选择方法的另一个好处是,可以通过反射来使用您的方法。您可以使用该reflect程序包列出和调用某种类型的方法,但使用“
just”函数则无法做到这一点。



 类似资料:
  • 问题内容: 我正在尝试使用当前位置在android中提交用户注册表格。我是android和java开发的新手。当我尝试在我的名称值对代码中访问onLocationChanged方法的myLat和myLan时,无法同时找到这两个变量。如何访问我的名称/值对代码中的两个变量。 问题答案: 您可能应该研究范围和成员变量。问题是,您不能在一个方法中声明一件事,然后尝试从另一方法访问它。 因此,我们将该事物

  • 通过下列任意一个方法访问成员变量时将返回 Field 类型的对象或数组。 getFields() getField(String name) getDeclaredFields() getDeclaredField(String name) 上述方法返回的 Field 对象代表一个成员变量。例如,要访问一个名称为 price 的成员变量,示例代码如下: Field 类的常用方法如表 1 所示 表1

  • 我假设在每次调用时都必须检查其变量是否初始化,因此将比慢,这样做对吗?

  • 问题内容: 我想使用匿名函数,所以我决定制作一个简单的主要查找器。这里是: 然而,我发现了什么,就是在每次访问,而我希望它是一个字面上的数字。我怎样才能使其成为替代? 问题答案: 您可以在创建lambda时“捕获” 这会将lambda的上下文设置为等于创建时的值。您还可以说,如果需要的话,它并不能完全捕获,但是可以满足您的需要。 这是一个查找问题,类似于具有定义函数的以下内容:

  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要

  • 问题内容: 我有以下代码,想在javascript中返回变量“ t”: 后面的代码: javascript中的调用者变量: 那么,如何使变量“ t”从代码隐藏函数GetSomeText获得“结果”? 谢谢。 问题答案: 试试这个- 假设这是页面上的公共方法。这将在页面类上调用方法GetSomeText(),然后在呈现页面时对页面数据进行Response.Write()。结果应以JavaScript