给定此类具有隐式转换运算符:
public class MyDateTime
{
public static implicit operator MyDateTime(System.Int64 encoded)
{
return new MyDateTime(encoded);
}
public MyDateTime(System.Int64 encoded)
{
_encoded = encoded;
}
System.Int64 _encoded;
}
Run Code Online (Sandbox Code Playgroud)
我现在可以做以下事情:
long a = 5;
MyDateTime b = a;
Run Code Online (Sandbox Code Playgroud)
但不是以下内容:
long f = 5;
object g = f;
MyDateTime h = g;
Run Code Online (Sandbox Code Playgroud)
这给出了编译时间:
无法将类型'object'隐式转换为'MyDateTime'.
我感觉合理.
现在我修改前面的例子如下:
long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
Run Code Online (Sandbox Code Playgroud)
编译好了.现在我得到一个运行时InvalidCastException:
无法将"System.Int64"类型的对象强制转换为"MyDateTime"类型.
这告诉我C#隐式转换运算符仅在编译时应用,并且在.NET运行时试图将对象动态转换为另一种类型时不应用.
我的问题:
顺便说一句,完整的应用程序是我Delegate.DynamicInvoke()用来调用一个带MyDateTime参数的函数,而我传递给的参数的类型很DynamicInvoke长.
c# dynamic-cast type-conversion implicit-cast dynamic-invoke
如何自动执行javascript?
我知道<body onLoad="">,但我想也许还有另一种方法可以做到这一点?
HTML:
<html><head></head><body><div id="test"></div></body></html>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
<script>(function(){var text = document.getElementById('test').innerHTML;var newtext = text.replace('', '');return newtext;})();</script>
Run Code Online (Sandbox Code Playgroud)
我想在"测试"中获取文本,替换某些部分,然后将其输出到浏览器.
关于如何做的任何想法?我很感激任何帮助.谢谢.
如果我将以下xml导出到excel 2007 ...我能够正确获取excel表.
<Workbook>
<Worksheet >
<MyXml>
<New A="111" B="222" />
</MyXml>
<MyXml>
<New A="111" B="222" />
</MyXml>
</Worksheet>
</Workbook>
Run Code Online (Sandbox Code Playgroud)
但我需要一个包含多个工作表的工作簿......在这种情况下如何指定xml?
function move() {
pos = pos+1;
t = setTimeout(move, 100);
}
Run Code Online (Sandbox Code Playgroud)
这可以称为递归吗?如果是,您能提供任何参考吗?
是否有正则表达式引擎在正则表达式模式解析期间进行实时编译,并在匹配/替换文本时使用?或者我在哪里可以学习JIT for i386或x64架构?
我最近试图对Python的内置正则表达式引擎进行测试,而普通的C代码与大约10MB的数据相比.
我发现,对于一个简单的替换(例如ab到zzz)它的比较快的:比C慢仅有2〜3倍
但是因为[a-z]c它花了大约5到8倍的时间.
并与分组(例如([a-z])(c)到AA\2\1BB)花了20到40倍尽可能多的时间C.
它不是即时编译,但我认为,如果我可以进行即时编译,它可以加速更多.
PS:我在编译模式期间对每个正则表达式模式使用性能分析,例如,简介1的ab配置文件1,范围的[a-z]c配置文件2 ,带分组的配置文件3 ([a-z])(c),每个配置文件具有单独的代码,因此在匹配和替换简单模式时不需要额外的成本.
我用psyco尝试过它,它并没有提高速度.可能是因为我正在对大数据进行文本替换,而不是多次循环.
如果我没有错,re.sub那么我认为Python已经在原生运行了,所以pysco无法提高速度.
我尝试将boost regex包装到python中,但它甚至比Python的正则表达式慢,所以看起来瓶颈在于Python的字符串处理,Jan Goyvaerts也在答案中指出了这一点.
我想将正则表达式转换ab[a-z]c为机器码,如下面的等效C代码(*s指向10MB长文本):
do{
if(*s=='a' && s[1]=='b' && s[2]>='a' && s[2]<='z' && s[3]=='c') return 1;
}while(*s++);
return 0;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
每当我调用我的函数时,每个调用的内存使用量增加大约+ 10M,所以我认为这里有一些内存泄漏.
....
PyObject *pair = PyTuple_New(2), *item = PyList_New(0);
PyTuple_SetItem(pair, 0, PyInt_FromLong(v[j]));
if(v[j] != DISTANCE_MAX && (p[j] || d[0][j])){
jp=j;
while(jp!=istart) {
PyList_Append(item, PyInt_FromLong(jp));
jp=p[jp];
}
PyList_Append(item, PyInt_FromLong(jp));
PyList_Reverse(item);
}
PyTuple_SetItem(pair, 1, item);
return pair;
....
Run Code Online (Sandbox Code Playgroud)
当我阅读文档时,有些调用就像
void
bug(PyObject *list)
{
PyObject *item = PyList_GetItem(list, 0);
PyList_SetItem(list, 1, PyInt_FromLong(0L));
PyObject_Print(item, stdout, 0); /* BUG! */
}
Run Code Online (Sandbox Code Playgroud)
需要像这样引用引用计数
void
no_bug(PyObject *list)
{
PyObject *item = PyList_GetItem(list, 0);
Py_INCREF(item);
PyList_SetItem(list, 1, PyInt_FromLong(0L));
PyObject_Print(item, stdout, 0);
Py_DECREF(item);
}
Run Code Online (Sandbox Code Playgroud)
那么,我应该把Py_INCREF和Py_DECREF放在我的函数上?
目前在python中有95个字节
I,V,X,L,C,D,M,R,r=1,5,10,50,100,500,1000,vars(),lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)
Run Code Online (Sandbox Code Playgroud)
以下是一些测试结果,它应该适用于1到3999(假设输入仅为有效字符)
>>> r("I")
1
>>> r("MCXI")
1111
>>> r("MMCCXXII")
2222
>>> r("MMMCCCXXXIII")
3333
>>> r("MMMDCCCLXXXVIII")
3888
>>> r("MMMCMXCIX")
3999
Run Code Online (Sandbox Code Playgroud)
这是不是有重复的这个,这是相反的一个.
那么,是否可以在Python中缩短它,或者像ruby这样的其他语言可以做得更短?
在IE中,"x".split(/(x)/).length返回0
在Firefox,Chrome,Safari和Opera中,它会返回3.
有人知道原因吗?如果可能,将非常感谢参考链接.
我相信这是一个IE正则表达式实现问题,但我找不到任何关于它的文档.
十进制分隔符是一个点,后跟最大一位数!没有指定范围.
多谢你们!