问题标签 [instance-method]

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 投票
5 回答
15252 浏览

ruby - 如何理解 class_eval() 和 instance_eval() 的区别?

仅基于方法的名称,我希望 class_eval 允许您向 Foo 添加一个类方法,而 instance_eval 允许您向 Foo 添加一个实例方法。但他们似乎反其道而行之

在上面的例子中,如果你在 Foo 类上调用 class_bar,你会得到一个未定义的方法错误,如果你在 Foo.new 返回的实例上调用 instance_bar,你也会得到一个未定义的方法错误。这两个错误似乎都与对 class_eval 和 instance_eval 应该做什么的直观理解相矛盾。

这些方法之间的真正区别是什么?

class_eval的文档:

mod.class_eval(string [, filename [, lineno]]) => obj

在 mod 的上下文中评估字符串或块。这可用于向类添加方法。

instance_eval的文档:

obj.instance_eval {| | 块 } => 对象

在接收器 (obj) 的上下文中评估包含 Ruby 源代码或给定块的字符串。为了设置上下文,在代码执行时将变量 self 设置为 obj,从而使代码可以访问 obj 的实例变量。

0 投票
2 回答
1762 浏览

ruby - 为什么 instance_eval() 在类上调用时会定义类方法?

我的理解是,在对象上调用instance_eval应该允许您为该对象定义实例变量或方法。

但是在上面的例子中,当你在 Foo 类上调用它来定义 instance_bar 方法时,instance_bar 就变成了一个可以用“Foo.instance_bar”调用的类方法。很明显,这段代码没有创建实例方法,因为 Foo.new.instance_bar 导致“未定义的方法 'instance_bar'”。

为什么 instance_eval 在这种情况下定义类方法而不是实例方法?

0 投票
1 回答
418 浏览

iphone - 可可触感。这些 NSMutableData 方法之间到底有什么区别?

我有点不清楚的一件事是这些 NSMutableArray 方法之间的区别:

在幕后,类方法在这里究竟做了什么?它与实例方法有何不同?

干杯,道格

0 投票
3 回答
3334 浏览

python - 克服 Python 关于实例方法的限制

Python 似乎对实例方法有一些限制。

  1. 无法复制实例方法。
  2. 实例方法不能被腌制。

这对我来说是个问题,因为我从事一个非常面向对象的项目,在该项目中我引用了实例方法,并且同时使用了 deepcopying 和 pickling。酸洗的事情主要是由多处理机制完成的。

什么是解决这个问题的好方法?我对复制问题做了一些丑陋的解决方法,但我正在寻找一个更好的解决方案来解决这两个问题。

有没有人有什么建议?

更新:

我的用例:我有一个很小的事件系统。每个事件都有一个.action属性指向它应该触发的函数,有时该函数是某个对象的实例方法。

0 投票
8 回答
6953 浏览

ruby - 将实例方法委托给类方法

在 Ruby 中,假设我有一个类Foo可以让我对我的大量 Foos 集合进行分类。所有的 Foo 都是绿色和球形的,这是一个基本的自然规律,所以我定义了类方法如下:

这让我做

但不是

尽管它my_foo显然是绿色的。

colour显然,我可以定义一个调用的实例方法self.class.colour,但如果我有许多这样的基本特征,那将变得笨拙。

我也可以通过定义method_missing尝试任何缺少的方法的类来做到这一点,但我不清楚这是我应该做的事情还是丑陋的黑客,或者如何安全地做到这一点(特别是因为我实际上在 ActiveRecord在 Rails 中,我知道它用 method_missing 做了一些聪明有趣的东西)。

你会推荐什么?

0 投票
3 回答
775 浏览

python - instancemethod 装饰器在哪里?

在我的代码中,我有一个返回类实例的方法,如下所示:

为了让事情井井有条,我正在考虑将 Props 放在 MyClass 中。然后我想绕过 fun 并直接使该类成为 MyClass 的实例方法,如下所示:

注意注释 - instancemethod 装饰器不存在。

有没有办法做到这一点,即将一个可调用对象变成一个实例方法?如果我将@instancemethod 更改为@classmethod,则构造工作,当然,父类是类,而不是实例。我很惊讶我找不到任何关于似乎相反的操作的信息。

很想把这件事弄清楚!

编辑:

看来我的问题并不清楚。我所拥有的是一个成员函数 fun,它返回的不是单个值或元组,而是一个充满数据的对象。此数据是根据 MyClass 对象和函数参数的内容生成的。我的初始代码完全符合我的要求。第二个代码是我希望如何编写它。

此外,我注意到我正在寻找的装饰器只是以下内容:

当然,这与我打算绕过的“有趣”方法相同。还要注意,微不足道的“return cls”并不相同,尽管乍一看似乎是这样。

使用这个装饰器,我的第二个类定义是有效的并产生所需的结果,即 a.fun() 返回一个对象,该对象(可能)基于 a 中的数据进行初始化:

如果此处定义的 instancemethod 不能作为 python 内置函数使用,这仍然给我留下了一个问题,因为它似乎是 classmethod 和 staticmethod 旁边的遗漏。但是,如果不是,我想我可以接受这种结构。

0 投票
1 回答
39 浏览

ruby-on-rails-3 - 如何在模型中定义类方法,而不是实例方法?

我希望能够Activity.pull_latest从控制器调用,但如果我这样做

我必须打电话给它Activity.new.pull_latest

如何在模型中定义类方法,而不是实例方法?

0 投票
2 回答
7091 浏览

python - 在 Python 中为实例方法添加属性

当我试图让类装饰器和方法装饰器很好地结合在一起时,我遇到了这种行为。本质上,方法装饰器会将一些方法标记为特殊的并带有一些虚拟值,而类装饰器会在之后出现并稍后填充该值。这是一个简化的例子

有谁知道为什么cow.moo.thing = 5不起作用,即使cow.moo.thing很清楚地给了我 10?为什么cow.moo.__func__.thing = 5有效?我不知道它为什么会这样,但是在随机摆弄dir(cow.moo)列表中的东西试图让它工作时,它突然做到了,我不知道为什么。

0 投票
4 回答
2231 浏览

objective-c - Objective-C 类方法不调用委托方法,而实例方法调用

我有以下两种方法:

如果我将 authenticateUserToGoogle 方法作为实例方法调用,如下所示:

我得到以下输出:

但是,如果我将 authenticateUserToGoogle 方法更改为类方法,只需将方法签名中的“-”更改为“+”,然后像这样调用它:

我得到以下输出:

换句话说,似乎使用类方法,委托方法连接 didReceiveResponse 永远不会被调用!

谁能向我解释这种行为?谢谢!

0 投票
4 回答
642 浏览

objective-c - Objective C 实例方法帮助 *初学者*

你们能帮我快速理解一个概念吗,我无法理解从 C 到 Objective-C 的转换:

如果我有一个看起来像这样的特定实例方法:

我明白了几件事...

  1. 它是一个可以被程序调用的实例方法。
  2. 在 C 中,这不会返回任何内容(只需执行卷曲中的代码)
  3. 在 C 中,语法稍微不那么令人困惑 -(void)InstanceMethod(Char *nameOfArgument)

这是我需要帮助的地方:

  1. 当你调用这个方法时,你还在给它发送一个参数吗?
  2. 如果是这样,该参数是NSString方法名称的实例n吗?

最后……跑题了

如果你有方法...

  1. (id) 是干什么用的?这是否告诉编译器它可以返回任何类型的对象?

感谢您帮助新手...非常感谢。