关于LINQ语法只是一点点关注.我压扁的IEnumerable<IEnumerable<T>>用SelectMany(x => x).
我的问题是lambda表达式x => x.它看起来有点难看.是否有一些静态的'身份功能'对象,我可以用而不是x => x?有点像SelectMany(IdentityFunction)?
我有一个视图功能:
@transaction.commit_manually
def xyz(request):
if ABC:
success = something()
if success:
status = "success"
transaction.commit()
else:
status = "dataerrors"
transaction.rollback()
else:
status = "uploadproblem"
transaction.rollback()
return render(request, "template.html", {
'status': status,
})
Run Code Online (Sandbox Code Playgroud)
我相信每个代码路径都以这种或那种方式结束事务.但Django似乎在抱怨它没有.有任何想法吗?
Django Version: 1.3
Exception Type: TransactionManagementError
Exception Value: Transaction managed block ended with pending COMMIT/ROLLBACK
Run Code Online (Sandbox Code Playgroud)
编辑:没有其他异常被抛出来改变代码路径.
Java有:
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
Run Code Online (Sandbox Code Playgroud)
如何在Scala中实现相同的功能?也就是说,将未定义数量的参数传递给方法?
我希望能够这样做:
val myXml = <myTag { someAttributes }> </myTag>
Run Code Online (Sandbox Code Playgroud)
(因为我不知道编译时属性细节是什么)
还有这个:
val myXml = <{someTag}></{someTag}>
Run Code Online (Sandbox Code Playgroud)
这不是有效的Scala语法.我最接近的是使用Elem对象来构造元素,但它有点麻烦(插入我不想要的PCDATA).有没有像上面这样做的方法?
关于GCing理论的快速问题.我有以下方法.它运行,并退出该方法.为什么即使在GC运行后,计时器仍然存在并保持"TICK"?我不相信在这个方法存在之后仍然有对定时器或timertask的引用,所以我希望定时器被GCed并导致异常.请帮我理解这个概念.
谢谢,jbu
private void startTimer()
{
Timer timer= new Timer();
TimerTask timerTask= new TimerTask()
{
@Override
public void run()
{
System.out.println("TICK");
}
};
timer.scheduleAtFixedRate(timerTask,
0,
500);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试连接一系列Seqs.
我可以做到apply concat.
user=> (count (apply concat (repeat 3000 (repeat 3000 true))))
9000000
Run Code Online (Sandbox Code Playgroud)
但是,根据我有限的知识,我会假设使用apply力量来实现懒惰的Seq,这对于非常大的输入来说似乎并不合适.如果可以的话,我宁愿懒洋洋地这样做.
所以我认为使用reduce就可以完成这项工作.
user=> (count (reduce concat (repeat 3000 (repeat 3000 true))))
Run Code Online (Sandbox Code Playgroud)
但这导致了
StackOverflowError clojure.lang.RT.seq (RT.java:484)
Run Code Online (Sandbox Code Playgroud)
我很惊讶,因为我会认为语义reduce意味着它是尾调用的递归.
两个问题:
apply是最好的方法吗?reduce一般不适合大投入?该filepath.Walk函数采用函数回调.这是直接函数,没有上下文指针.当然,一个主要的用例Walk是走一个目录并根据它进行一些操作,参考更广泛的上下文(例如将每个文件输入到表中).
如果我在C#中编写它,我将使用一个对象(可以指向上下文中的对象的字段)作为回调(使用给定的回调方法),因此该对象可以封装Walk从中调用的上下文.
(编辑:用户" usr "表示闭包方法也发生在C#中)
如果我在C中写这个,我会要求一个函数和一个上下文指针,void *因此该函数有一个上下文指针,它可以传递给Walk函数并将其传递给回调函数.
但Go只有函数参数,没有明显的上下文指针参数.
(如果我设计了这个函数,我会把一个对象作为一个回调而不是一个函数,符合接口FileWalkerCallback或其他什么,并callback(...)在该接口上放置一个方法.然后,消费者可以在传递它之前将任何上下文附加到对象到Walk.)
我能想到的唯一方法是捕获回调函数中外部函数的闭包.这是我如何使用它:
func ScanAllFiles(location string, myStorageThing *StorageThing) (err error) {
numScanned = 0
// Wrap this up in this function's closure to capture the `corpus` binding.
var scan = func(path string, fileInfo os.FileInfo, inpErr error) (err error) {
numScanned ++
myStorageThing.DoSomething(path)
}
fmt.Println("Scan All")
err = filepath.Walk(location, scan)
fmt.Println("Total scanned", numScanned)
return
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我创建了回调函数,因此它的闭包包含变量numScanned和 …
让演员入睡最好的方法是什么?我将演员设置为代理,希望维护数据库的不同部分(包括从外部源获取数据).由于多种原因(包括没有超载数据库或通信和一般负载问题),我希望演员在每个操作之间休眠.我正在看10个演员对象.
演员将无限运行,因为总会有新数据进入,或者坐在表中等待传播到数据库的其他部分等.想法是让数据库在任何时候都尽可能完整及时.
我可以通过无限循环执行此操作,并在每个循环结束时进行休眠,但根据http://www.scala-lang.org/node/242,actor使用线程池,只要所有线程都被阻塞,它就会被扩展.所以我想每个actor中的Thread.sleep都是个坏主意,因为会不必要地浪费线程.
我可能有一个中央演员有自己的循环,在时钟上发送消息给订阅者(如异步事件时钟观察者)?
有没有人做过类似的事情或有任何建议?很抱歉有额外的(可能是多余的)信息.
干杯
乔
来自OO(C#,Java,Scala),我非常重视代码重用和类型安全的原则.上述语言中的类型参数可以完成这项工作并启用通用数据结构,这些结构既是类型安全的,也不会"浪费"代码.
当我陷入C时,我意识到我必须做出妥协,我希望它是正确的.我的数据结构void *在每个节点/元素中都有一个,我失去了类型安全性,或者我必须为我想要使用它们的每种类型重新编写我的结构和代码.
代码的复杂性是一个显而易见的因素:遍历数组或链接列表是微不足道的,并且添加*next一个结构不是额外的努力; 在这些情况下,不尝试重用结构和代码是有道理的.但对于更复杂的结构,答案并不那么明显.
还有模块化和可测试性:将类型及其操作与使用该结构的代码分离,使测试更容易.反之亦然:在一个结构上测试某些代码的迭代,同时它试图做其他事情变得混乱.
那么你的建议是什么?void *和重用或类型安全和重复的代码?有没有一般原则?当我不适合时,我是否试图强迫OO进行程序化?
编辑:请不要推荐C++,我的问题是关于C!
我的计划是使用我的C#程序读取XML文档,搜索我想要更改的特定条目,然后写出修改后的文档.但是,我已经变得不稳定,因为很难区分元素,无论它们是使用XmlTextReader开始还是结束,我正在使用它来读取文件.我可以做一些建议让我走上正轨.
该文档是一个HTML文档,因此您可以想象,它非常复杂.
我想在HTML文档中搜索元素id,例如查找并更改src;
<img border="0" src="bigpicture.png" width="248" height="36" alt="" id="lookforthis" />
Run Code Online (Sandbox Code Playgroud)