问题标签 [extension-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
28 浏览

kotlin - 向多个非继承类添加方法

有什么方法可以将方法添加到多个类,或者减少实现相同方法所需的重复代码量。

目前我使用以下内容(在此示例中添加 ac 方法,该方法计算迭代中项目的重复次数):

我想知道是否有一种方法可以减少代码量,目前我对我希望在这 3 种类型中的任何一种上使用的所有方法重复这一点。

我能找到的唯一方法是使用通用方法定义一个接口,然后使用一个类来包装每个类型并实现该通用接口,但这似乎有很多代码可能是一种更简单的方法.

0 投票
4 回答
10336 浏览

mvvm - Kotlin 扩展函数数据绑定

是否有可能将扩展功能与数据绑定一起使用?XML:

我的.package.domain.country.model.city

错误

[kapt] 发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。****/ 数据绑定错误 ****msg:在 my.package.domain.country.model.City 类中找不到方法 streetName()

谢谢 ;)

0 投票
2 回答
320 浏览

c# - 在 C# 中,我如何创建一个扩展方法,该方法采用带有泛型参数的 lambda,Func作为参数。

我正在尝试创建一个将 Func 作为参数的扩展方法,但出现错误。这是我得到的:

在行return f(s);我得到一个错误:Error CS1503 Argument 1: cannot convert from 'string' to 'T'

如何指定具有泛型参数T和泛型返回类型的泛型 lambda Func TResult

0 投票
0 回答
250 浏览

angular - 对象扩展功能 TypeScript Angular 6

为什么当我尝试代码时

它有效,但替换ObjectString导致错误。我认为您可以毫无问题地扩展 Object 吗?

我的目标确实是模仿 Kotlinapplylet扩展功能 - 但我想了解如何/为什么可以/不能扩展对象?

0 投票
3 回答
4865 浏览

arrays - Kotlin - Val 无法重新分配,但可以通过从索引访问重新分配?

我有这两个功能,我正在尝试修改元素。其中一个编译,另一个说'val不能被重新分配'。以下功能有什么区别?为什么一个编译而另一个不编译?

编译的那个

那个说

无法重新分配 Val

0 投票
2 回答
2750 浏览

unit-testing - 在类中测试扩展函数

如果我们想测试一个类型的扩展函数,我们可以创建一个该类型的实例,调用该函数并检查返回值。但是测试类内部定义的扩展函数呢?

我们如何测试foo()类中方法的逻辑SubClass1SubClass2?甚至可能吗?

我知道我可以改变设计来测试它。我想到了两种可能:

  1. 不要使用扩展功能。¯\_(ツ)_/¯

    然后我们可以创建一个对象SubClass1,调用foo()并检查返回值。

  2. 创建具有可见性的附加扩展函数internal只是为了测试逻辑。

    然后我们可以创建一个对象String,调用internalFoo()并检查返回值。但是,我不喜欢这种解决方案,因为我们可以更改的主体override fun String.foo(): Int并且我们的测试会通过。

那么,是否可以在类中测试扩展功能?如果不是,您将如何更改您的设计以测试他们的逻辑?

0 投票
3 回答
1395 浏览

android - 带有 Generic 的 Kotlin 扩展功能不适用于 Any?

我想从 RealmList 类中获得一个扩展功能:

但是每当我使用它时,就会出现这个错误:

在此处输入图像描述

0 投票
3 回答
1444 浏览

android - 在 kotlin 上从 this@ 更改名称

我有以下情况,一个名为savefromMarker

1. 代码

代码对我来说很好。

2.问题

要使用Markerinsidesave方法的实例,我需要 use this@save,但这个名称并不具有暗示性,乍一看,它看起来不像Marker.

3.问题

是否可以应用别名来代替使用this@save

非常感谢!

0 投票
0 回答
98 浏览

kotlin - 为什么 inc() 不能定义为与接收者类型不同的类中的扩展函数?

这是我在做 Koan N28 时遇到的:

但是,编译器在该operator位置大喊大叫,说'operator' modifier is inapplicable on this function: receiver must be a supertype of the return type. 为了让代码编译,我必须将扩展函数移到顶层。但是,如果我MyDate.unaryPlus()在同一个地方重载,代码会编译。

0 投票
1 回答
213 浏览

saxon - 具有 NODE_SEQUENCE 或 ANY_SEQUENCE 的撒克逊扩展函数

我正在从 Saxon 9.3 (PE) 切换到更新的版本。我正在使用扩展函数(带有“扩展 ExtensionFunctionDefinition”)

我的论点定义为

在 XSLt 中,调用是使用例如第一个参数上的变量进行的,这是一个构建的 XML 部分。

接到电话,

我需要更改我的代码,因为 ExtensionFunctionCall 接口发生了变化(以前,我有

)

我现在有两个问题:

1) 参数类型从 SequenceIterator 更改为 Sequence。像这样

不能再使用了,并且

给我一个运行时错误

尽管收到的对象是 TinyTree(根据运行时进行的调试)。

2)返回值也不同(从SequenceIterator到Sequence)我之前有return new ListIterator(saxon_result);

这不再可能(saxon_result 是 java.util.ArrayList )在这里,我不知道如何将我的 ArrayList 作为序列发回......

有知识的人能解释一下吗?谢谢!法比安