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

为什么在字符串类型上未定义字符串函数?

颜杰
2023-03-14
问题内容

我只是想知道为什么Google Go中的字符串函数是在strings包中定义的,而不是在string数据类型本身上定义的。他们本可以轻松完成

func (s string) ToUpper() string {
}

而不是当前

func ToUpper(s string) string {
}

strings包装中。

我的猜测是,如果您想ToUpper在扩展的自定义类型上实现的自定义版本string(即type MyString string),则无法再访问该ToUpper类型的内置函数,但是我找不到对此的任何支持。


问题答案:

简短的答案是:“保持语言简单”。

作为一种语言运行,仅允许在同一程序包中的类型上定义方法,但是由于string(像其他内置类型一样)是在语言本身中实现的,因此无法在不使语言/编译器复杂化的情况下向其中添加方法。

也有一部分是因为Go的设计方式。

有关更多信息,请参阅Rob Pike(Go的创建者之一)发送的邮件:

Go没有针对基本类型的方法,因为该语言的设计人员不希望为基本类型定义方法,部分原因是因为它们可能会对接口产生连锁反应。我相信我们大家仍然对这一决定感到满意。其他人可能会有不同的感觉。

-抢

而这一次太:

我们根本不了解其中的含义。没有什么可解释的。Go的设计非常谨慎。

按照这种方式,查看字符串库的大小。如安德鲁所说,在基本类型上使用所有这些功能方法会使该语言复杂化。如果通过可维护,更容易扩展和更灵活的库实现语言的功能,为什么还要使语言复杂化呢?语言要简单得多。

-抢



 类似资料:
  • 当我将接口的任何属性设置为可选时,我会在将其成员分配给其他变量时遇到如下错误: 我如何绕过这个错误?

  • 问题内容: 我得到这个错误 问题答案: 具有无效的返回类型。更改方法的返回类型以返回值

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 问题内容: 例如: 问题答案: 这是因为从索引0 in开始的长度为0的子字符串等于空字符串: 当然,任何字符串的长度为零的 每个 子字符串都等于空字符串。

  • 这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u

  • 我发现这个错误:类型字符串的getText()方法未定义 怎么了? 这是代码: 我在最后2次对齐时得到错误。 以下是JtextArea的代码 以下是完整的代码: