(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.6节(默认参数)

4.2.6 默认参数

​ 与重载相关的另一个特性是可以为函数的某些参数提供默认值,这样就可以在调用函数时可使用或不使用这些参数。如果调用中缺少参数,函数将使用默认值。

​ 让我举一个例子(仍然是 OverloadTest 示例的一部分)。我们可以定义以下 Show 调用的封装,提供两个默认参数:

procedure NewMessage(Msg: string; Caption: string = 'Message'; Separator: string = ': ');
begin
  Show(Caption + Separator + Msg);
end;

​ 有了这个定义,我们可以以以下方式调用该过程:

NewMessage('Something wrong here!');
NewMessage('Something wrong here!', 'Attention');
NewMessage('Hello', 'Message', '--');

​ 输出如下:

Message: Something wrong here!
Attention: Something wrong here!
Message--Hello

​ 请注意,编译器不会生成任何特殊代码来支持默认参数;它也不会创建多个(重载的)函数或过程的副本。缺少的参数只是由编译器添加到调用代码中。有一个影响默认参数使用的重要限制:您不能“跳过”参数。例如,您不能在省略第二个参数后将第三个参数传递给函数。

​ 请注意,编译器不会生成支持默认参数的任何特殊代码,也不会创建函数或过程的多个(重载)副本。编译器只是将缺失的参数添加到调用代码中。使用默认参数有一个重要的限制: 不能 "跳过"参数。例如,在省略第二个参数后,不能将第三个参数传递给函数。

​ 在定义和调用带缺省参数的函数和过程(以及方法)时,还有其他一些规则:

  • 在例程的调用中,只能从最后一个参数开始省略参数。换句话说,如果省略了一个参数,就必须同时省略后面的参数。
  • 在例程的定义中,带缺省值的参数必须放在参数列表的末尾。
  • 默认值必须是常量。显然,这限制了默认参数的使用类型。例如,动态数组或接口类型不能使用 nil 以外的默认参数,也不能使用记录。
  • 带有默认值的参数必须以值或 const 的形式传递。引用(var)参数不能有默认值。

​ 同时使用缺省参数和重载,更有可能使编译器感到困惑,从而引发歧义调用错误,如上一节所述。例如,如果我在前面的示例中添加以下新版本的过程 NewMessage:

procedure NewMessage(Str: string; I: Integer = 0); overload;
begin
   Show(Str + ': ' + IntToStr(I))
end;

​ 编译器不会报错,因为这是一个合法的定义。然而,如果您写下以下调用:

NewMessage('Hello');

​ 这将被编译器标记为:

[dcc32 Error] E2251 Ambiguous overloaded call to 'NewMessage' 
	Related method: procedure NewMessage(string; string; string); 
	Related method: procedure NewMessage(string; Integer);

​ 请注意,这个错误出现在新的重载定义之前能够编译正确的一行代码中。实际上,我们无法调用只有一个字符串参数的过程 NewMessage,因为编译器不知道我们是要调用只有字符串参数的版本,还是要调用有字符串参数和带有默认值的整数参数的版本。当编译器无法确定时,编译器就会停止,并通知程序员更清楚地表达自己的意图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/380794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CS50x 2024 - Lecture 2 - Arrays

00:00:00 - Introduction 00:01:01 - Story Time 00:06:03 - Compiling make本身并不是编译器,实际上是一个自动运行编译器的程序,如c语言的clang clang -o hello hello.csrc/ $ clang -o hello hello_world.c /usr/bin/ld: /tmp/hello_world-67f51…

Oracle 面试题 | 19.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

你的立身之本是什么?

去年发生的一切,大到疫情、政治经济形势、行业的萎靡和震荡,小到身边的跳槽、裁员、公司倒闭……似乎都在告诉我们: 当冲击到来的时候,它是不会提前跟你打招呼的。 接下来的10年,我们所面临的不确定性,比起…

Linux 软件管理(YUM RPM)

1 YUM yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次…

fps cf游戏,一键断网辅助工具

一键断网瞬移 工具特色:一改常规断网操作(断网开启,所有人都卡住,使得还原后找不到人的问题 ),不影响任何人移动,开启断网跟着别人一起走,其他人无任何异常卡顿。 工具功能&…

Linux应用程序几种参数传递方式

大家好,今天给大家介绍Linux应用程序几种参数传递方式,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 在Linux中,应用程序可以通过多种方式接收参数。以下…

文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题

六、用go语言,说明如何来维护一个支持操作MIN-GAP的一些数的动态集Q,使得该操作能给出Q中两个最接近的数之间的差值。例如,Q(1,5,9,15,18,22),则MIN-GAP返回18-153&#…

【EAI 011】SayCan: Grounding Language in Robotic Affordances

论文标题:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 论文作者:Michael Ahn, Anthony Brohan, Noah Brown, Yevgen Chebotar, Omar Cortes, Byron David, Chelsea Finn, Chuyuan Fu, Keerthana Gopalakrishnan, Karol Hausm…

【正式】今年第一篇CSDN(纯技术教学)

一、文件上传简介 文件上传漏洞是指用户上传了一个可执行的脚本文件(木马、病毒、恶意脚本、webshell等),并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方,由于程序对用户上传…

C语言笔试题之求出二叉树的最大深度(递归解决)

实例要求: 1、给定一个二叉树 root ,返回其最大深度;2、二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数; 案例展示: 实例分析: 1、判断根节点是否为空;2、分别递归处理左…

物联网数据隐私保护技术

在物联网(IoT)的世界中,无数的设备通过互联网连接在一起,不断地收集、传输和处理数据。这些数据有助于提高生产效率、优化用户体验并创造新的服务模式。然而,随着数据量的剧增,数据隐私保护成为了一个不能忽…

【java苍穹外卖项目实战二】苍穹外卖环境搭建

文章目录 1、前端环境搭建2、后端环境搭建1、项目结构搭建2、Git版本控制3、数据库创建 开发环境搭建主要包含前端环境和后端环境两部分。 前端的页面我们只需要导入资料中的nginx, 前端页面的代码我们只需要能看懂即可。 1、前端环境搭建 前端运行环境的nginx&am…

《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)

文章目录 7.1 配置和使用 MySQL 监控工具7.1.1 基础知识7.1.2 重点案例:使用 Python 和 Prometheus 监控 MySQL 性能7.1.3 拓展案例 1:自动化 MySQL 慢查询日志分析7.1.4 拓展案例 2:实时警报系统 7.2 解读 MySQL 日志文件7.2.1 基础知识7.2.…

【Spring】Bean 的实例化方式

Spring 为 Bean 提供了多种实例化方式,通常包括4种方式 也就是说在 Spring 中为 Bean 对象的创建准备了多种方案,目的是:更加灵活 第一种:通过构造方法实例化 第二种:通过简单工厂模式实例化 第三种:通过…

【第二届 Runway短视频创作大赛】——截至日期2024年03月01日

短视频创作大赛 关于AI Film Festival竞赛概况参加资格报名期间报名方法 提交要求奖品附录 关于AI Film Festival 2022年成立的AIFF是一个融合了最新AI技术于电影制作中的艺术和艺术家节日,让我们得以一窥新创意时代的风采。从众多参赛作品中…

求职|基于Springboot的校园求职招聘系统设计与实现(源码+数据库+文档)

校园求职招聘系统目录 目录 基于Springboot的校园求职招聘系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、企业信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

Android:Volley框架使用

3.15 Volley框架使用 Volley框架主要作为网络请求,图片加载工具。当应用数据量小、网络请求频繁,可以使用Volley框架。 框架Github地址:https://github.com/google/volley Volley框架的简单使用,创建项目Pro_VolleyDemo。将Github上下载Volley框架源代码,volley-master.zi…

华为机考入门python3--(11)牛客11-数字颠倒

分类:字符串 知识点: int转字符串 str int(num) 对字符串进行逆序 my_str str[::-1] 题目来自【牛客】 def reverse_integer(n): # 将整数转换为字符串 str_n str(n) # 使用[::-1]来反转字符串 reversed_str str_n[::-1] return reversed…

力扣刷题之旅:进阶篇(三)

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 一、动态规划(DP) 首先,让我们来…

【JAVA WEB】 css背景属性 圆角矩形的绘制

目录 背景属性设置 圆角矩形 背景属性设置 背景颜色,在style中 background-color:颜色; 背景图片 background-image:url(……) 背景图片的平铺方式 background-repeat: 平铺方式 repeat 平铺(默认)no-repeat 不平铺repeat-x 水平平铺repea…