我有一些奇怪的行为造成的错误.我可能从根本上缺少一些关于函数属性语义的东西.或者它可能是一个错误.我上线了
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Run Code Online (Sandbox Code Playgroud)
首先,我定义一个类,并为其中一个方法添加一个属性.
>>> class Foo(object):
... def bar(self):
... pass
... bar.xyzzy = 'magic'
...
Run Code Online (Sandbox Code Playgroud)
现在我可以看到它存在 Foo.bar
>>> hasattr(Foo.bar, 'xyzzy')
True
Run Code Online (Sandbox Code Playgroud)
我可以找回它.
>>> Foo.bar.xyzzy
'magic'
>>> getattr(Foo.bar, 'xyzzy')
'magic'
Run Code Online (Sandbox Code Playgroud)
但我不能删除它.
>>> del Foo.bar.xyzzy
Traceback (most recent call last):
...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'
>>> delattr(Foo.bar, 'xyzzy')
Traceback (most recent call last):
...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?我认为这与在Foo.bar这里被报告为'instancemethod' 的事实有关,而不是如果你只是问什么Foo.bar …
这是一个丑陋的Javascript,很高兴找到一个解决方法.
Javascript没有类,这是一件好事.但它以一种相当丑陋的方式实现了对象之间的回退.基础构造应该有一个对象,当一个属性找不到时,它会回落到另一个对象.
因此,如果我们想要a回归,b我们会想做一些事情:
a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
Run Code Online (Sandbox Code Playgroud)
然后
a.dock == 2;
Run Code Online (Sandbox Code Playgroud)
但是,Javascript代替了new运营商和prototypes.所以我们做得不那么优雅:
function A(sun) {
this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);
a.dock == 2;
Run Code Online (Sandbox Code Playgroud)
但除了优雅之外,它的功能也严格不足,因为它意味着用A创建的任何内容都会获得相同的后备对象.
我想要做的是从这个人为限制中解放Javascript,并且能够将任何其他单个对象作为其后备对象提供给任何单个对象.这样我可以在有意义时保持当前行为,但在有意义时使用对象级继承.
我最初的方法是创建一个虚拟构造函数:
function setFallback(from_obj, to_obj) {
from_obj.constructor = function () {};
from_obj.constructor.prototype = to_obj;
}
a = {sun:1};
b = {dock:2};
setFallback(a, b);
Run Code Online (Sandbox Code Playgroud)
但不幸的是:
a.dock == undefined;
Run Code Online (Sandbox Code Playgroud)
任何想法为什么这不起作用,或任何解决方案的实施setFallback?
(我在V8上运行,通过node.js,以防这是依赖于平台的) …
当使用node.js repl时,有没有办法退出节点过度热衷的连续行?
例如:
$ node
> {- -}
...
Run Code Online (Sandbox Code Playgroud)
几乎您可以输入的所有内容都会为您提供另一条延续线。Ctrl+D 退出整个 repl。
显然我不想一直打字{- -},但我确实发现在使用 repl 进行实验时经常输入错误的内容。然后我必须退出 repl,并释放内存中的所有位。
我显然误解了关于模板特化的重要事项,因为:
template<typename type> const type getInfo(int i) { return 0; }
template<> const char* getInfo<char*>(int i) { return nullptr; }
Run Code Online (Sandbox Code Playgroud)
无法编译:
src/main.cpp:19:24: error: no function template matches function
template specialization 'getInfo'
Run Code Online (Sandbox Code Playgroud)
而
template<typename type> type getInfo(int i) { return 0; }
template<> char* getInfo<char*>(int i) { return nullptr; }
Run Code Online (Sandbox Code Playgroud)
工作良好.如何使用const模板专业化?我的菜鸟错误是什么?
我在clang ++上使用c ++ 11.
它似乎适用于任何一种情况,但为什么和如何,哪种是最好的方法?
c++ ×1
inheritance ×1
ios ×1
javascript ×1
modal-dialog ×1
node.js ×1
python ×1
templates ×1
v8 ×1