首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

扩展函数的"this@“语法

扩展函数的"this@"语法是一种在Kotlin编程语言中使用的语法,用于在扩展函数中访问调用该函数的对象的上下文。通过使用"this@"语法,可以在扩展函数中明确指定要访问的对象。

在Kotlin中,扩展函数允许我们向现有的类添加新的函数,而无需修改原始类的代码。通常情况下,扩展函数内部可以使用关键字"this"来引用调用该函数的对象。然而,当存在多个同名的扩展函数时,或者在扩展函数内部存在与扩展函数同名的成员函数时,使用"this"关键字可能会导致歧义。

为了解决这个问题,Kotlin引入了"this@"语法。使用"this@"语法,我们可以在扩展函数中明确指定要访问的对象。具体使用方法如下:

代码语言:txt
复制
fun ClassName.functionName() {
    // 使用 this@ClassName 来引用调用该函数的对象
    // 执行函数的逻辑
}

在上述代码中,"ClassName"是指扩展函数所扩展的类的名称,"functionName"是扩展函数的名称。通过使用"this@ClassName",我们可以在扩展函数内部明确指定要访问的对象。

扩展函数的"this@"语法在以下情况下特别有用:

  1. 当存在多个同名的扩展函数时,可以使用"this@"语法来指定要调用的具体扩展函数。
  2. 当扩展函数内部存在与扩展函数同名的成员函数时,可以使用"this@"语法来指定要访问的对象。

总结一下,扩展函数的"this@"语法是一种在Kotlin中用于指定访问对象上下文的语法。它可以解决扩展函数中存在同名函数时的歧义问题。通过使用"this@"语法,我们可以明确指定要访问的对象,从而更加灵活地编写扩展函数。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云数据库 TencentDB:https://cloud.tencent.com/product/cdb
  • 云服务器 CVM:https://cloud.tencent.com/product/cvm
  • 人工智能平台 AI Lab:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 移动开发平台 MDP:https://cloud.tencent.com/product/mdp
  • 对象存储 COS:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/tmu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

函数扩展

# 函数扩展 # 函数参数默认值 # 基本用法 ES6 之前,不能直接为函数参数指定默认值,只能采用变通方法。...这种语法行为,在不设置参数默认值时,是不会出现。...虽然可以先解析函数体代码,再执行参数代码,但是这样无疑就增加了复杂性。因此,标准索性禁止了这种用法,只要参数使用了默认值、解构赋值、或者扩展运算符,就不能显式指定严格模式。 两种方法可以规避这种限制。...# 嵌套箭头函数 箭头函数内部,还可以再使用箭头函数。下面是一个 ES5 语法多重嵌套函数。...这对于版本管理系统来说,就会显示添加逗号那一行也发生了变动。这看上去有点冗余,因此新语法允许定义和调用时,尾部直接有一个逗号。

79210

函数扩展

函数扩展.png 函数扩展 函数参数默认值 ES6 允许为函数参数设置默认值,即直接写在参数定义后面 参数变量是默认声明,所以不能用let或const再次声明。...这样就不需要使用arguments对象了 rest 参数就不存在这个问题,它就是一个真正数组,数组特有的方法都可以使用 严格模式 ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符...,那么函数内部就不能显式设定为严格模式,否则会报错 设定全局性严格模式,这是合法 函数包在一个无参数立即执行函数里面 name 属性 函数name属性,返回该函数函数名。...如果将一个匿名函数赋值给一个变量,ES5 name属性,会返回空字符串,而 ES6 name属性会返回实际函数名 如果将一个具名函数赋值给一个变量,则 ES5 和 ES6 name属性都返回这个具名函数原本名字...Function构造函数返回函数实例,name属性值为anonymous bind返回函数,name属性值会加上bound前缀 箭头函数 ES6 允许使用“箭头”(=>)定义函数 如果箭头函数不需要参数或需要多个参数

48320
  • MLSQL 语法扩展设计

    前言 MLSQL 语法非常简单,只有: set select train/run/predict save load 等几种语法。因为MLSQL为了简单起见,对扩展语法是非常抵触。...`jobId`; 虽然已然很简单,但是用户觉得还是不够简洁,用户期待如下表示方法: show tableName; kill jobid; 但是如果加这些,就意味添加了新语法,需要修改语法文件。...解决方案 我们知道在MLSQL里,ET是扩展性最好东西,任何功能都可以通过ET来实现。MLSQL内部比如Python支持等也是通过ET实现。...在不增加新语法情况下,我们其实可以给一段代码片段重新命名从而实现新功能。...开始作区分命令和其他脚本指令调用。 结束语 MLSQL 还提供了include语法,从而实现脚本更好复用。通过新类似“宏”支持,可以让脚本获得更好复用性。

    49800

    【Kotlin】扩展函数 ① ( 扩展函数简介 | 为 Any 超类定义扩展函数 | private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 )

    扩展函数 , 可以在 不修改 原有类 情况下 增加类功能 ; Kotlin 中如果类 没有被 open 关键字修饰 , 则该类 不能被继承 , 如果想要扩展该类 , 可以使用 扩展函数 ; 扩展函数...---- 扩展函数 特点 是 为 父类定义扩展函数 , 子类也可以调用该扩展函数 ; 为 Any 超类 定义 扩展函数 , 那么 所有的 Any 子类 都可以 调用该 扩展函数 ; 一旦在 Any...超类中定义了扩展函数 , 则在整个项目中 , 该扩展函数都有效 ; 这就导致了 Kotlin 框架非常灵活 , 使用别人 SDK 时会发现 为各种现有类定义 扩展函数 ; 代码示例 : 在下面的代码中..., 使用 private 定义了 Any 超类扩展函数 , 在本代码中 main 函数中调用该扩展函数是有效 ; private fun Any.printSelf() { println...let 函数是泛型扩展函数 ---- 标准库 中 let 函数 , 就是 泛型扩展函数 , inline 关键字表明该函数是 内联函数 , 其中 匿名函数 参数在编译时直接将函数体拷贝到使用位置

    1.6K20

    【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )

    关键字修饰单个参数扩展函数简略写法 九、定义扩展文件 十、重命名扩展函数 十一、Kotlin 标准库扩展函数 一、扩展函数简介 ---- 为 现有类 定义 扩展函数 , 可以在 不修改 原有类 情况下...超类中定义了扩展函数 , 则在整个项目中 , 该扩展函数都有效 ; 这就导致了 Kotlin 框架非常灵活 , 使用别人 SDK 时会发现 为各种现有类定义 扩展函数 ; 代码示例 : 在下面的代码中..., 此外还可以 给现有类定义 扩展属性 ; 为现有类定义 扩展属性 语法格式为 : val 现有类类名.扩展属性名: 扩展属性类型 get() = {} var 现有类类名.扩展属性名: 扩展属性类型...---- 之前讲定义扩展函数 , 扩展属性 , 都是为 非空类型 定义 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 情况...---- Kotlin 标准库 提供功能 , 都是通过 扩展函数 实现 , 为 现有类 扩展 标准库文件 都是 在 类名基础上加上 s 来命名 , 如 : 为 Sequence 类提供扩展函数

    2.4K30

    【Kotlin】扩展函数 ③ ( 定义扩展文件 | 重命名扩展函数 | Kotlin 标准库扩展函数 )

    文章目录 一、定义扩展文件 二、重命名扩展函数 三、Kotlin 标准库扩展函数 一、定义扩展文件 ---- 如果定义 扩展函数 需要在 多个 Kotlin 代码文件 中使用 , 则需要在 单独...Kotlin 文件 中定义 , 该文件被称为 扩展文件 ; 定义 标准库函数 Standard.kt 就是 独立 扩展文件 ; 代码示例 : 扩展文件一般都 单独定义在一个 Package 中...-- 如果 对 要调用 扩展函数 名字不满意 , 则可以 使用 as 关键字 重命名扩展函数 ; 注意 : 一旦使用了 重命名扩展函数 , 则原扩展函数不能使用 , 一旦使用 , 直接报 Unresolved...---- Kotlin 标准库 提供功能 , 都是通过 扩展函数 实现 , 为 现有类 扩展 标准库文件 都是 在 类名基础上加上 s 来命名 , 如 : 为 Sequence 类提供扩展函数..., 定义在 Sequences.kt 代码中 ; 为 Range 类提供扩展函数 , 定义在 Ranges.kt 代码中 ; 为 Map 类提供扩展函数 , 定义在 Maps.kt 代码中 ; 标准库

    1.2K20

    Generator 函数语法

    Generator 函数语法.png Generator 函数语法 简介 Generator 函数是 ES6 提供一种异步编程解决方案,语法行为与传统函数完全不同 语法上,首先可以把它理解成,Generator...二是,函数体内部使用yield表达式,定义不同内部状态 总结一下,调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数内部指针。...作为对象属性 Generator 函数 属性前面有一个星号,表示这个属性是一个 Generator 函数 Generator 函数this Generator 函数也不能跟new命令一起用,会报错...生成一个空对象,使用call方法绑定 Generator 函数内部this 构造函数调用以后,这个空对象就是 Generator 函数实例对象了 含义 Generator 是实现状态机最佳结构...Generator 函数被称为“半协程”(semi-coroutine),意思是只有 Generator 函数调用者,才能将程序执行权还给 Generator 函数 Generator 执行产生上下文环境

    39810

    Generator 函数语法

    # Generator 函数语法 # 简介 # 基本概念 Generator 函数是 ES6 提供一种异步编程解决方案,语法行为与传统函数完全不同。...本章详细介绍 Generator 函数语法和 API,它异步编程应用请看《Generator 函数异步应用》一章。 封装了多个内部状态。...这个功能有很重要语法意义。Generator 函数从暂停状态到恢复运行,它上下文状态(context)是不变。...第一次是扩展运算符遍历函数logReturned返回遍历器对象,第二次是yield*语句遍历函数genFuncWithReturn返回遍历器对象。...这两次遍历效果是叠加,最终表现为扩展运算符遍历函数genFuncWithReturn返回遍历器对象。所以,最后数据表达式得到值等于[ 'a', 'b' ]。

    73920

    【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )

    , 导入包时导入一次即可调用所有的重载扩展函数 ; ③ 扩展函数作用域优先级 : 声明导入扩展函数优先级高于默认包优先级 , 声明导入哪个包就调用哪个包扩展函数 ; II ....扩展函数导入 : 调用接收者类型扩展函数 , 需要导入扩展函数包 , 导入格式为 : import 包名.扩展函数名 3 ....调用定义在本包里扩展函数 : 可以直接调用 , 导入扩展函数操作可以省略 , 写上也不会出错 ; 4 . 调用定义在其它包扩展函数 : 必须导入扩展函数 , 才能调用该扩展函数 ; III ....不同包可以定义相同函数签名扩展函数 : 在不同包内 , 可以定义相同函数签名扩展函数 , 调用时需要考虑各种情况 ; 其导入包扩展函数优先级较高 , 没有发现导入包 , 才会去默认本包中查找是否有定义该签名扩展函数...情况 一 : 在包内调用本包和外包 相同签名 扩展函数 ; ① 导入包优先级高 : 如果导入外包扩展函数 , 就会调用外包扩展函数 ; ② 本包默认优先级较低 : 如果没有导入 , 就会默认调用本包定义扩展函数

    80520

    Kotlin 扩展函数 与 JS prototypeKotlin 扩展函数 与 JS prototype

    Kotlin 扩展函数 与 JS prototype Kotlin 扩展函数 Kotlin扩展函数功能使得我们可以为现有的类添加新函数,实现某一具体功能 。...扩展函数是静态解析,并未对原类添加函数或属性,对类本身没有任何影响。 扩展属性允许定义在类或者kotlin文件中,不允许定义在函数中。...(extensions) 在不修改原类情况下, Kotlin能给一个类扩展新功能,无需继承该类,也不用任何设计模式(如装饰模式等), Kotlin支持扩展函数扩展属性!...扩展函数是静态解析分发,不是虚函数(即没有多态),调用只取决于对象声明类型! 1.调用是由对象声明类型决定,而不是由对象实际类型决定!...prototype就是“一个给类对象添加方法方法”,使用prototype属性,可以给类动态地添加方法 语法 object.prototype.name=value 实例 在本例中,我们将展示如何使用

    1.6K20

    Python基础语法-函数-函数参数(二)

    可变参数:这些参数允许我们传递任意数量参数,这些参数被包装为一个元组传递给函数。...例如,下面的函数接受任意数量参数:def add(*args): result = 0 for arg in args: result += arg return result...Output: 0 3 15在这个例子中,我们没有传递任何参数给函数,所以函数返回0。...当我们传递一个参数3时,函数将它加到结果0上得到结果3。当我们传递三个参数3、5和7时,函数将它们加起来得到结果15。可变参数:这些参数允许我们传递任意数量参数,这些参数被包装为一个元组传递给函数。...例如,下面的函数接受任意数量参数:def add(*args): result = 0 for arg in args: result += arg return result

    26341

    Python基础语法-函数-函数作用域

    在 Python 中,函数作为代码模块化单位,可以实现代码重用和简化。函数具有自己作用域,即变量可见范围,了解函数作用域是编写高质量代码关键之一。...变量作用域在 Python 中,变量作用域可以分为局部作用域和全局作用域。全局变量是定义在函数外部变量,可以在程序任何地方访问。...如果在函数内部定义了一个同名局部变量,那么函数内部操作将只针对局部变量。如果函数内部想要访问全局变量,可以使用 global 关键字来声明。...my_func() 函数中定义了一个同名局部变量 count,值为 1,函数内部输出 1。但是,函数外部 count 仍然是全局变量,输出为 0。...函数内部将全局变量 count 值修改为 1,并输出 1。函数外部 count 也被修改为 1。

    35231

    ES6 函数扩展

    函数参数默认值 与解构赋值默认值结合使用 rest参数 严格模式 name 属性 箭头函数 嵌套箭头函数 函数参数尾逗号 函数参数默认值 ES6 之前,不能直接为函数参数指定默认值,只能采用变通方法...// 报错 function f(a, ...b, c) { // ... } 严格模式 ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式...name属性,返回该函数函数名。...下面是一个 ES5 语法多重嵌套函数。...这对于版本管理系统来说,就会显示添加逗号那一行也发生了变动。这看上去有点冗余,因此新语法允许定义和调用时,尾部直接有一个逗号。

    30220

    Python基础语法-函数-定义函数

    Python中函数是一段代码块,可以被多次调用执行。函数通常被用来完成一些特定任务,它们接受参数(如果有的话),并且可以返回一个值(如果有的话)。...Python中定义函数语法如下:def function_name(parameter1, parameter2, ...): """ function_docstring """...function_name:函数名称,应该遵循Python命名规则。参数列表:函数可以接受0个或多个参数,参数列表用逗号分隔,可以在函数调用时传递参数。...冒号:标志着函数定义结束,之后是函数主体。docstring:是函数文档字符串,它是可选,用于描述函数作用和使用方法。函数体:包含了一些操作或语句,定义了函数具体功能。...return语句:可选,用于从函数中返回一个值。如果函数没有返回值,它仍然会返回None。

    45020

    Python基础语法-函数-匿名函数

    在Python中,函数是可重用代码块,可以接受输入并返回输出。在Python中,函数被定义为由def关键字后跟函数名称和参数列表组成语句块。...然而,Python也支持另一种类型函数,称为“匿名函数”。在本文中,我们将探讨Python中匿名函数,并介绍它们语法、用法和示例。什么是匿名函数?...匿名函数,也称为“lambda函数”,是一个没有名称函数,可以在需要函数任何地方使用。相对于标准函数,它们更短小精悍,通常只用于一次性任务。...匿名函数语法在Python中,使用lambda关键字来定义一个匿名函数,它基本语法如下:lambda arguments: expression其中,arguments是函数参数列表,expression...然后,我们使用map()函数将这个匿名函数应用于一个包含1到5数字列表中每个元素,并将结果存储在一个名为“squares”变量中。

    45220

    【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数简略写法 )

    文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...语法格式为 : val 现有类类名.扩展属性名: 扩展属性类型 get() = {} var 现有类类名.扩展属性名: 扩展属性类型 get() = {} set() = {} 扩展属性...---- 之前讲定义扩展函数 , 扩展属性 , 都是为 非空类型 定义 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 情况...非空类型扩展函数 如果定义 扩展函数 是为 可空类型定义 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...---- 如果 扩展函数 只有 一个参数 , 并且在 扩展函数 定义时 使用了 infix 关键字修饰 , 在调用该扩展函数时 , 可以省略 接收者与函数之间点 和 参数列表括号 ; 调用 使用

    1.9K30
    领券