首先,我是一名Haskell新手.我读过这个: 高度可变域中的不可变功能对象 我的问题几乎相同 - 如何有效地编写状态应该改变的算法.让我们以Dijkstra的算法为例.将找到新路径并更新距离.在传统语言中,这很简单,而在Haskell中,例如我只能想到创建全新的距离,这些距离太慢而且占用内存.是否存在类似于设计模式的情况,其中应该实现具有可变数据结构的算法,并且速度和内存使用是主要问题?
我很奇怪,为什么没有双重渲染时,有一个redirect_to或render在before_action.考虑这个例子:
class SomeController < ApplicationController
before_action :callback
def new
callback2
render 'new'
end
def callback
render 'new'
end
def callback2
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
before_action如果它不能重定向但是它是如何制作的话,我认为这将是无用的?如果我评论before_action它会抛出异常.如何before_action实现不会导致双重渲染?
我在集合中有这些字段:
[{
u'_id': ObjectId('4d1f7b4d5d256b18c8000000'),
u'name': u'1'
},{
u'_id': ObjectId('4d1f7b505d256b18c8000001'),
u'name': u'2'
},{
u'_id': ObjectId('4d1f7b525d256b18c8000002'),
u'name': u'3'
}]
Run Code Online (Sandbox Code Playgroud)
然后我这样做一个查询:
[x for x in c.things.find( {'$or' : [{'name':'1'}, {'name':'2'}] } )]
Run Code Online (Sandbox Code Playgroud)
我希望得到:
[{
u'_id': ObjectId('4d1f7b4d5d256b18c8000000'),
u'name': u'1'
}, {
u'_id': ObjectId('4d1f7b505d256b18c8000001'),
u'name': u'2'
}]
Run Code Online (Sandbox Code Playgroud)
不幸的是.我究竟做错了什么?
我有Qt控制台服务器应用程序.我希望有人按下Ctrl + C以正确退出我的服务器(调用析构函数等).我已经读过这篇文章了,但是我希望这可以在Linux和Windows上运行.怎么做?
当我发现这真的困扰我时,我正在玩Haskell和ghci:
foldl (++) [[3,4,5], [2,3,4], [2,1,1]] []
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:[3,4,5,2,3,4,2,1,1]
然而它得到:
[[3,4,5],[2,3,4],[2,1,1]]
Run Code Online (Sandbox Code Playgroud)
据我所知,foldl应该是这样的:
(([] ++ [3, 4, 5]) ++ [2, 3, 4]) ++ [2, 1, 1]
Run Code Online (Sandbox Code Playgroud)
如果我在ghci中键入它,它确实是[3,4,5,2,3,4,2,1,1].
而另一个奇怪的是:
Prelude> foldl1 (++) [[3,4,5], [2, 3, 4], [2, 1, 1]]
[3,4,5,2,3,4,2,1,1]
Run Code Online (Sandbox Code Playgroud)
我希望foldl和foldl1的行为方式相同.那么foldl实际上做了什么?
我正在玩Flask,我无法弄清楚调试机制是如何工作的.更准确地说,当我使用我的应用程序保存python文件时,我不需要重新启动服务器,它会在我发出请求时自动加载.所以我的问题是正在运行的程序如何知道它已被更改并响应这些更改?
我正在尝试使用 Python 和 PHP 的加密库openssl_pkey_get_private并openssl_sign使用 SHA1 哈希来实现功能上等效的签名。我读到 PHP 使用 PKCS1v15 填充,所以这也是我尝试使用的。我的代码是:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.serialization import load_pem_private_key
from cryptography.hazmat.backends import default_backend
pk = open('key.pem', 'rb')
key = load_pem_private_key(pk.read(), password=None, backend=default_backend())
message = b'hello world'
signature = key.sign(
message,
padding.PKCS1v15,
hashes.SHA1()
)
Run Code Online (Sandbox Code Playgroud)
执行此命令会产生:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-ef3db8a6f4a8> in <module>()
3 message,
4 padding.PKCS1v15,
----> 5 hashes.SHA1()
6 )
/home/vagrant/virtualenvs/test/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/rsa.py in sign(self, data, padding, algorithm)
613
614 def …Run Code Online (Sandbox Code Playgroud) class Base(object):
def m(self):
print 'base'
class MixinA(Base):
def m(self):
super(MixinA, self).m()
print 'mixin a'
class MixinB(Base):
def m(self):
super(MixinB, self).m()
print 'mixin b'
class Top(MixinB, MixinA, Base):
def m(self):
super(Top, self).m()
print 'top'
t = Top()
t.m()
Run Code Online (Sandbox Code Playgroud)
这打印:
base
mixin a
mixin b
top
Run Code Online (Sandbox Code Playgroud)
我对多种事情感到惊讶.第一个MRO Top是(<class 'Top'>, <class 'MixinB'>, <class 'MixinA'>, <class 'Base'>, <type 'object'>)
mixin a来之前mixin b?super尝试在MRO每一个类(不同于搜索时,返回找到的第一个属性的属性)?jQuery中有奇怪的模式:
var jQuery = (function() {
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
...
return jQuery;
})();
Run Code Online (Sandbox Code Playgroud)
这有什么实际的原因?为什么不公开内部jQuery函数?它只适用于内部jQuery和外部jQuery中的名称冲突,因为它们都在闭包中.
我正在玩Go Playground并找到这段代码:
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s",
e.When, e.What)
}
func run() error {
return &MyError{
time.Now(),
"it didn't work",
}
}
func main() {
if err := run(); err != nil {
fmt.Println(err)
}
}
Run Code Online (Sandbox Code Playgroud)
所以在这里我可以看到*MyError实现error接口.但是,如果我&在errorfunc中删除并返回MyError,我收到编译时错误:
prog.go:19: cannot use MyError literal (type MyError) as type error in return …
我有一个这样的课:
class SomeClass {
public:
QString data;
SomeClass(const QString &);
};
Run Code Online (Sandbox Code Playgroud)
并在.cpp文件中:
SomeClass::SomeClass(const QString &_data) {
data = _data;
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
SomeClass c("foobar");
Run Code Online (Sandbox Code Playgroud)
这将调用QString("foobar")并将其传递给SomeClass的构造函数.但是这个QString是一个自动对象,所以它的生命周期将在构造函数之后消失.另一方面,data除非修改,否则不会被复制(据我所知,Qt文档).这段代码是否可能存在终身问题,或者我错了吗?如何更好地设计?