我正在为我的一个应用程序编写一个全局错误处理"模块".
我想要的一个功能是能够使用Try {} Catch {}块轻松包装函数,以便对该函数的所有调用将自动具有将调用我的全局日志记录方法的错误处理代码.(避免使用try/catch块在任何地方污染代码).
然而,这稍微超出了我对Javascript,.call和.apply方法以及"this"关键字的低级功能的理解.
我根据Prototype的Function.wrap方法编写了这段代码:
Object.extend(Function.prototype, {
TryCatchWrap: function() {
var __method = this;
return function() {
try { __method.apply(this, arguments) } catch(ex) { ErrorHandler.Exception(ex); }
}
}
});
Run Code Online (Sandbox Code Playgroud)
使用方式如下:
function DoSomething(a, b, c, d) {
document.write(a + b + c)
alert(1/e);
}
var fn2 = DoSomething.TryCatchWrap();
fn2(1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)
该代码完美无缺.它打印出6,然后调用我的全局错误处理程序.
我的问题是......当我正在包装的函数在一个对象中时它是否会破坏某些东西,它会使用"this"运算符?我有点担心,因为我打电话.在那里传递一些东西,我担心这可能会破坏一些东西.
如果我有a.com,a.cmd,a.bat和a.exe文件%PATH%,如果我只调用命令"a",Windows会选择哪一个?这是M $的正式规格吗?
我只是想用-n包装我的gvim.exe可执行文件,但我的gvim.bat似乎既不是从命令行运行,也不是从运行对话框运行.
我经常需要在C++中处理动态分配的数组,因此依赖于Boost for scoped_array,shared_array等.在阅读了Stroustrup的C++ 11 FAQ和C++ 11 Reference Wiki之后,我无法找到C++ 11标准提供的这些动态数组包装器的合适替代品.有什么东西我忽略了,还是我必须继续依赖Boost?
非常感谢您的帮助!
在软件可移植性环境中,这三个概念有什么区别?
所以例如,我想使用ncurses库,原始的ncurses库是用C语言编写的,但我的应用程序是用C++编写的,然后我找到了"ncurses wrapper","绑定到ncurses"和"ncurses port".我应该使用哪一个?
每个人的利弊是什么?
如何BOOL在Objective-C中包装一个对象类型?
我想存储BOOL在userInfo的对象NSTimer.我怎么包装呢?
我的一位同事告诉我,Visual Studio允许指向一个.dll并自动神奇地生成一个C#包装类.这真的有可能吗?如果是这样,那么如何实现这一目标呢?我浏览过网络,但未能提出任何建议!
谢谢大家!
想我也会分享这些资源,
我defaultdict(set)用来填充非常大的数据结构中的内部映射.填充后,整个结构(包括映射)将暴露给客户端代码.那时,我不希望任何人修改映射.
并且没有人故意这样做.但有时,客户端代码可能会意外地引用不存在的元素.此时,普通字典会引发KeyError,但由于映射是defaultdict,它只是在该键上创建一个新元素(空集).这很难理解,因为一切都是默默无闻的.但我需要确保不会发生这种情况(语义实际上不会中断,但映射会变得很大).
我该怎么办?我可以看到这些选择:
查找当前和未来客户端代码中的所有实例,其中对映射执行字典查找,并将其转换为其他实例mapping.get(k, {}).这太可怕了.
defaultdict数据结构完全初始化后,通过将其转换为"冻结" dict.(我知道它并没有真正冻结,但我相信客户端代码实际上并没有写mapping[k] = v.)不雅,并且性能大.
包装defaultdict成一个dict界面.这样做的优雅方式是什么?我担心性能损失可能很大(这种查找在紧密循环中被大量使用).
子类defaultdict并添加一个"关闭"所有defaultdict功能的方法,使其表现得像是常规的dict.这是上面3的变种,但我不确定它是否更快.如果不依赖于实施细节,我不知道它是否可行.
dict在数据结构中使用regular ,重写那里的所有代码,首先检查元素是否在字典中,如果不在,则添加它.不好.
我想在python中包装特定类的每个方法,并且我想通过最低限度地编辑类的代码来实现.我该怎么办呢?
我目前有一个C++后端,我需要连接GUI,因为我以前从未构建过GUI,所以我很困惑从哪里开始.
我很乐意用C++和Java编写代码,所以我更喜欢我的GUI使用其中一种语言.此外,GUI必须在Windows和Linux上合理地独立于操作系统(并且希望是因为Mac).
现在我明白,如果我使用Java来做这件事,我需要一些包装器才能做到 - 但我也听到(严格来说是二手)在C++中编写GUI是一件痛苦的事.
我不想在Java中重写太多的后端代码(谁做??)我希望输入:
谢谢,干杯全:)
public class Primitive {
void m(Number b, Number ... a) {} // widening, autoboxing->widening->varargs
void m(byte b, Number ... a) {} // unboxing, autoboxing->widening->varargs
public static void main(String[] args) {
Byte b = 12;
Primitive obj = new Primitive();
obj.m(b, 23);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经搜索过并发现扩展优先级高于取消装箱,因此在上面的方法调用中,应该调用第一个方法,因为第二个参数对于两者都是相同的.但这不会发生.你可以解释一下吗?
wrapper ×10
java ×2
python ×2
apply ×1
backend ×1
batch-file ×1
binding ×1
boost ×1
c# ×1
c++ ×1
c++11 ×1
defaultdict ×1
dll ×1
function ×1
ios ×1
iphone ×1
javascript ×1
jdk1.6 ×1
metaclass ×1
objective-c ×1
overloading ×1
path ×1
port ×1
portability ×1
primitive ×1
python-3.x ×1
try-catch ×1
vim ×1