我的编程空间,编程开发者的网络收藏夹
学习永远不晚

函数中输入参数的可变类型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

函数中输入参数的可变类型

php小编苹果为您介绍函数中输入参数的可变类型。在php中,函数的参数类型可以是固定的,也可以是可变的。可变类型参数,指的是函数可以接受不同类型的参数作为输入,这在处理不同场景下的数据非常有用。通过使用特殊的参数标识符,比如“...”,我们可以在函数定义中声明可变类型参数。这使得我们能够更加灵活地处理各种不同类型的数据,提高代码的复用性和可读性。无论是字符串、数字、数组或是其他类型,我们都可以轻松地将它们作为参数传递给函数,并在函数内部进行相应的处理。这种灵活的参数类型处理方式,让我们的代码更加健壮和适应性强,能够应对各种复杂的业务需求。

问题内容

我创建了一个函数来获取用户对拉取请求的最后评论。我正在使用“github.com/google/go-github/github”包。我想将它用于 []*github.issuecomment 和 []*github.pullrequestcomment 类型。有没有办法使输入参数的类型可变,这样我就不必在函数定义中指定它,并且可以使用任一类型调用函数?

func getlastuserinteractionpr(comments_array *github.issuecomment or *github.pullrequestcomment)(*github.issuecomment or *github.pullrequestcomment) {
}

泛型的使用:

func getlastuserinteractionpr(comments_array any)(any) {
}

这是一个紧急解决方案,因为我正在做的整个项目都是用 go 1.14 编写的,并且这个功能可以从 go 1.18 中获得

当我尝试使用空接口{}作为输入类型时:

func getLastUserInteractionPRIssue(comments_array interface{})(*github.IssueComment) {

comments_array []*github.IssueComment(comments_array); err {
fmt.Println("success")
    } else {
        fmt.Println("failure")
    }
}

解决方法

你关心例如的内部结构吗? issuecomment

type issuecomment struct {
    id        *int64     `json:"id,omitempty"`
    nodeid    *string    `json:"node_id,omitempty"`
    body      *string    `json:"body,omitempty"`
    user      *user      `json:"user,omitempty"`
    reactions *reactions `json:"reactions,omitempty"`
    createdat *time.time `json:"created_at,omitempty"`
    updatedat *time.time `json:"updated_at,omitempty"`
    // authorassociation is the comment author's relationship to the issue's repository.
    // possible values are "collaborator", "contributor", "first_timer", "first_time_contributor", "member", "owner", or "none".
    authorassociation *string `json:"author_association,omitempty"`
    url               *string `json:"url,omitempty"`
    htmlurl           *string `json:"html_url,omitempty"`
    issueurl          *string `json:"issue_url,omitempty"`
}

例如,您关心从中提取某些特定字段吗? pullrequestcomment 是一个更大的结构(它有更多字段),您关心从中提取一些字段吗?

或者您只想要每个的字符串表示形式?您要做什么很大程度上取决于您想如何处理传递的值。

如果您只想要每个 string 表示,您可以使用极端(老实说,不是很安全 - 我不推荐这个)示例,让您的函数接受 fmt.stringer 对象的切片:

func dostuffwithstringifiedcomments(cs []fmt.stringer) {
  // both issuecomment and pullrequestcomment provide string()
  // methods and therefore implement fmt.stringer
  for _, comment := range cs {
    dosomethingwith(comment.string())
  }
}

您的切片现在可以包含任一类型的对象,并且不会发生任何爆炸。缺点:它还可能包含数以亿计的其他类型,但没有一个是您想要的。因此,您需要添加类型断言检查:

switch t := comment.(type) {
  case github.issuecomment:
    // do good stuff
  case github.pullrequestcomment:
    // do other good stuff
  default:
    // yell and scream about the value of t
}

如果您想要提取某些字段,则必须组合一个采用 []interface{} 之类的函数(使其成为空接口的一部分,而不是空接口代表切片),迭代它并对切片的每个元素进行类型检查,并提取任何有意义的字段,只要该元素属于您期望的类型即可:

func DoStuff(comments []interface{}) error {
  for _, c : = range comments {
    if ic, ok := c.(*github.IssueComment); ok { // Remove the deref if your slice contains values, not references
      // Pull out fields and do IssueComment-specific things
      ProcessIssueComment(ic)
    } else if prc, ok := c.(*github.PullRequestComment); ok {
      // Do PRComment-specific things
      ProcessPullRequestComment(prc)
    } else {
      return(fmt.Errorf("I did not want something of type %s", t))
    }
  }
  return nil
}

另外:游说项目所有者(如果不是您)迁移到当前版本的 go。 1.14 到 2020 年才发布,但这对于 go 版本来说已经是永恒的了。

以上就是函数中输入参数的可变类型的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

函数中输入参数的可变类型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

函数中输入参数的可变类型

php小编苹果为您介绍函数中输入参数的可变类型。在php中,函数的参数类型可以是固定的,也可以是可变的。可变类型参数,指的是函数可以接受不同类型的参数作为输入,这在处理不同场景下的数据非常有用。通过使用特殊的参数标识符,比如“...”,我们
函数中输入参数的可变类型
2024-02-09

泛型函数在Golang中解决可变参数类型的问题吗?

go 中的泛型函数解决了可变参数类型的问题:泛型函数允许使用类型参数,在运行时指定。这使得编写可以处理不同类型参数的函数成为可能。例如,max 函数是一个泛型函数,它接受两个可比较参数并返回较大值。通过使用泛型函数,我们可以编写更灵活通用的
泛型函数在Golang中解决可变参数类型的问题吗?
2024-04-16

golang中的可变参数函数

问题内容package mainimport ("fmt")type isum interface {sum() int}type sumimpl struct {num int}func (s sumimpl) sum() int
golang中的可变参数函数
2024-02-12

PHP 函数参数类型的可用资源

php 函数参数类型包括:整型、字符串、浮点数、布尔值、数组、对象、资源和 null;复合类型包括闭包。PHP 函数参数类型的可用资源在 PHP 中,函数参数可以具有不同的类型,包括整数、字符串、数组、对象和闭包。了解可用参数类型对于创建
PHP 函数参数类型的可用资源
2024-04-19

python函数的默认参数为什么不可以定义可变类型

这篇文章主要介绍“python函数的默认参数为什么不可以定义可变类型”,在日常操作中,相信很多人在python函数的默认参数为什么不可以定义可变类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python函
2023-06-29

C++ 函数默认参数和可变参数在泛型编程中的作用

c++++ 中的默认参数和可变参数在泛型编程中发挥着至关重要的作用:默认参数允许函数在调用时指定可选参数,便于处理不同类型和默认值的元素。可变参数允许函数接受任意数量的参数,便于处理可变数量的元素。实战案例中,泛型容器(例如 vector
C++ 函数默认参数和可变参数在泛型编程中的作用
2024-04-22

golang可变参数是否可以用于泛型函数?

在 go 中,变参可以用于泛型函数,允许创建可接受可变数量参数且适用于多种类型的泛型函数。例如,您可以创建泛型函数 mode,它查找给定列表中出现次数最多的元素:mode 接受可变数量的 t 类型元素。它通过为每个元素创建 counts 来
golang可变参数是否可以用于泛型函数?
2024-04-29

Python中的函数参数类型检查

这篇文章主要介绍了Python中的函数参数类型检查,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-19

深入研究Python函数可变参数的机制

深入探讨Python函数的可变参数机制引言:Python是一种功能强大且易于使用的编程语言,它提供了很多便利功能来提高开发效率,其中之一就是可变参数机制。在Python中,函数可以接受不同数量的参数,这种灵活性为程序员提供了更多的选择。本
深入研究Python函数可变参数的机制
2024-02-03

golang可变参数的语法和类型要求?

go语言中的可变参数语法为 funcname(param1, param2, ..., paramn ...type),其中 param1 至 paramn 是固定参数,type 是可变参数的类型。可变参数只能是切片、数组或可变参数本身,如
golang可变参数的语法和类型要求?
2024-04-30

PHP 函数参数类型的演变历史是怎样的?

php 函数参数类型历史演变:php 4 之前:松散类型,无类型提示或强制执行。php 4:引入类型提示,但仅作为注释。php 5:增强了类型提示,引入了严格模式,但仍然支持松散类型。php 7:更严格的类型检查,引入了标量类型和改进的复合
PHP 函数参数类型的演变历史是怎样的?
2024-04-10

PHP 函数参数类型的演变历史是怎样的?

php 函数参数类型历史演变:php 4 之前:松散类型,无类型提示或强制执行。php 4:引入类型提示,但仅作为注释。php 5:增强了类型提示,引入了严格模式,但仍然支持松散类型。php 7:更严格的类型检查,引入了标量类型和改进的复合
PHP 函数参数类型的演变历史是怎样的?
2024-04-10

简单谈谈Python中函数的可变参数

前言在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。 可变参数( * ) 可变参数,顾名思义,
2022-06-04

PHP 函数参数可以接受哪些数据类型?

大多数 php 函数参数接受多种数据类型,包括标量类型(整数、浮点数、字符串、布尔值)、复合类型(数组、对象)和其他类型(null、资源引用)。如函数 myfunction 可接受字符串、整数和字符串类型的参数,并输出函数调用时传递给这些参
PHP 函数参数可以接受哪些数据类型?
2024-04-11

无法推断函数构造函数的泛型参数中的类型

php小编柚子将为大家解答一个常见的问题:在构造函数的泛型参数中,无法推断出类型的原因。在PHP中,泛型参数的类型推断是通过参数的默认值来实现的。然而,在构造函数中,由于参数是在对象创建之前就被传入的,因此无法通过对象的实例来推断参数的类型
无法推断函数构造函数的泛型参数中的类型
2024-02-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录