问题标签 [class-extensions]

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 回答
25 浏览

ios - self 与“generic typet” ceating 扩展时的 T 差异

我遇到了一个我不理解的有趣行为。这是产生这种行为的代码:

这是执行此代码时控制台的输出:

当我在我的自定义类上调用 thenloadFromNib方法时。它会产生两种不同的行为,具体取决于我如何获得nibName.

  1. T.nibName:返回字符串UIView
  2. nibName:返回字符串MyCustomViewSubclass

你知道这里发生了什么吗?为什么在运行selfT不是同一个对象?这是我发现的另一件有趣的事情。当您将断点放入nibNamegetter 时,您可以在调试器中看到以下内容:

T.nibName: T.nibName nibName: 笔尖名称

这被称为:

感谢您的任何解释。

0 投票
3 回答
1960 浏览

ios - 使用扩展重构代码时出现“Swift 键路径中的预期表达式”错误

我一直在尝试通过感谢函数并将它们添加到一个单独的文件extension中来重构代码ViewController

我在这个扩展中拥有的是一个函数,它添加gesture recognizers到一些视图中,这些视图引用了我放在其他文件扩展名中的函数ViewController。在构建时,我收到此错误“Swift 键路径中的预期表达式”

是什么导致了这个错误?

0 投票
1 回答
49 浏览

ruby-on-rails - Rails 中的 Ruby 类扩展在本地声明时有效,从 `/lib/` 导入时返回 `nil`

TLDR:哈希扩展工作完美,当本地包含在我的邮件程序中时返回所需的输出,但从nil模块导入时总是返回lib/,即使类方法已成功加载。

当我在我的 mailer.rb 文件中声明扩展时,在我的类定义之前,如下所示:

它完美无缺,但这是不好的做法。我认为最好先声明扩展名,/lib/core_ext/hash/try_deep.rb然后在 Mailer 中要求它,如下所示:

/lib/core_ext/hash/try_deep.rb:

/my_mailer.rb:

0 投票
1 回答
278 浏览

ios - ObjC - 为什么允许实例访问 .m 文件中的类扩展属性?

众所周知,在 .h 文件中声明的 ObjC 属性是接口“外部可见”,而在 .m 文件中声明的属性(类扩展名)只能在 .m 中访问,即“私有”或“隐藏”。但实际上可以编译如下代码。

类A.h

类A.m

事实是,不仅ClassA *aObj定义在ClassA自己的方法可以访问类扩展属性aInt,而且ClassA *aObj定义在另一个_ClassB同时在同一个ClassA.m文件中也可以访问aInt

据我了解,aObj在类方法中定义与在另一个类和单独的 .m 文件中定义的foo任何类型变量没有区别。ClassA *但是后者绝不会访问'aInt',比如说

C类.m

为什么会这样?这可以用 ObjC 运行时机制或其他什么来解释吗?

0 投票
2 回答
1773 浏览

typescript - 如何扩展 Array 类并保留其实现

我想向 Array 类添加一些函数(我不想将它们作为类外部的函数,因为理想情况.下,在对象后面键入时可以发现它们)。这是我到目前为止所拥有的:

这运行良好:

但是如果我尝试运行它:

我收到以下错误:

理想情况下,我会得到一个相当于new List(this.map(x=>x*2))如何扩展 Array 类而无需重写 Array 的所有方法的对象?

0 投票
0 回答
142 浏览

objective-c - 如何在 Swift 中访问目标 c 类扩展

我之前写过很多类扩展,比如:

我的头文件,NSDate+convenience.h:

我的 Obj-C 实现文件,NSDate+convenience.m:

我在目标 c 中使用我的 NSDate 类扩展:

但是当想在 Swift 中使用它时:

或者

无论如何,NSDate 没有像“dateFromMyString”这样的成员,我有很多我之前写过的类扩展。我是否需要再次在 Swift 中实现这些类扩展。

我必须强调,我可以在 Swift 中使用我自定义的普通 Obj-C 类属性和方法,但我不能使用作为 Obj-C 扩展的 obj-C 文件。所以请不要给我链接“如何从 Swift 调用 Objective-C 代码”。请理解我的问题。

0 投票
1 回答
105 浏览

php - 如何在yii1中扩展CHttpSession类

首先我想说我是 yii1 编程的新手。我必须在 yii1 中销毁或关闭会话时捕获事件,并在触发事件时重定向到索引。

我试图扩展 CHttpSession 类并扩展方法 sessionDestroy(),但我错过了一些东西,因为我的解决方案不起作用。

我的类扩展了位于 components 文件夹中的 CHttpSession:

然后在我的控制器中我有:

我希望在日志中看到销毁信息消息,但没有任何反应。

0 投票
0 回答
37 浏览

java - 努力将方法链与类扩展结合起来

我正在尝试将方法链接与类扩展和基类中定义的方法结合起来。但是,我很难让它工作,因为我对泛型还不是很熟悉。有人可以帮我让它工作吗?这将不胜感激。谢谢!

现在的情况:

尝试使用这些类和方法的代码:

0 投票
1 回答
191 浏览

inheritance - kotlin 类扩展在列表上下文中使用时解析父类的值而不是子类

我正在使用 Kotlin (1.3.20) 中的类扩展,并且在同一属性上扩展父类和子类然后使用这些实例的列表时遇到了问题。

基本上发生的事情是子类的实例返回为父类的属性设置的值,我不明白为什么会这样。我希望下面代码中的第 16 行返回“ext-special-thing”,但它确实返回“ext-thing”,即使 b[1] 中的实例肯定是 ExtSpecialThing 类型。

我怀疑原因是扩展属性/扩展函数在幕后工作的方式(顺便说一句:这个问题也存在于扩展函数中);但我不是这方面的专家。

tl; dr:第 16 行失败……为什么?

0 投票
2 回答
205 浏览

c# - 扩展 IEnumerable 的 Select 以将源包含在选择器中

IEnumerable 的重载之一是:

在选择器中,我希望包含源代码。我知道这听起来违反直觉,因为您首先提供了 Select 的源代码,但 JavaScript 也有类似的东西。我想在这里像这样的快速情况下使用它:

上面会报错,因为 Select 的 selector 参数没有返回 3 个值。只是当前对象和索引。我希望它包括来源。

我不想先单独创建列表,然后再对其执行 .first 。

这是我在扩展方面走了多远;我不确定如何实现它。

更新

上述情况只是一个虚构的例子。我的实际情况需要使用.Last()not.First()所以索引不会有用,因为我们不知道最后一个索引是什么,而不是第一个是零。因此,我需要将源传回。