我正绕着国家单子行道.琐碎的例子很容易理解.我现在转向一个现实世界的案例,其中域对象是复合的.例如,使用以下域对象(它们没有多大意义,只是纯粹的例子):
case class Master(workers: Map[String, Worker])
case class Worker(elapsed: Long, result: Vector[String])
case class Message(workerId: String, work: String, elapsed: Long)
Run Code Online (Sandbox Code Playgroud)
考虑到Worker作为S类型的State[S, +A]单子它很容易写几个组合子这样的:
type WorkerState[+A] = State[Worker, A]
def update(message: Message): WorkerState[Unit] = State.modify { w =>
w.copy(elapsed = w.elapsed + message.elapsed,
result = w.result :+ message.work)
}
def getWork: WorkerState[Vector[String]] = State { w => (w.result, w) }
def getElapsed: WorkerState[Long] = State { w => (w.elapsed, w) }
def updateAndGetElapsed(message: Message): WorkerState[Long] = …Run Code Online (Sandbox Code Playgroud) 可以说我有两个班:
class A : public QObject {};
class B : public QObject {};
Run Code Online (Sandbox Code Playgroud)
那我去
QObject *a = new A();
QObject *b = new B();
Run Code Online (Sandbox Code Playgroud)
现在,我如何确保"a"是A类的实例,而"b"是B类的实例?
目前我这样做:
if (a->inherits(A::staticMetaObject.className())) {
...
} else if (a->inherits(A::staticMetaObject.className())) {
...
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
这就是我需要的 - 有一个密钥可以创建我的python站点包的ctags.
我有这个命令,将打印site-packages路径:
!python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
Run Code Online (Sandbox Code Playgroud)
这就是我对键映射的看法:
map <F11> :!ctags -R -f ./tags *site-packages-path-goes-here*<CR>
Run Code Online (Sandbox Code Playgroud)
如何将一个命令的结果插入到键绑定语句中?
我想在运行时获取site-packages路径的原因是我强烈地使用virtualenv.结果,期望的路径一直在变化.
我使用vim进行编码和特别是python编码.我经常想用python解释器执行当前缓冲区.(例如,运行unittests),通常我这样做:!python % <Enter>
这个scenatio可以正常工作与全局python,但我想运行virtualenv python而不是.如何在vim中启用virtualenv?是否可以在运行时切换virtualenv?
我正在使用macvim
我开始用Qt的单元测试系统编写一些测试.
你通常如何组织测试?它是每个模块类的一个测试类,还是用单个测试类测试整个模块?Qt文档建议遵循前一策略.
我想为模块编写测试.该模块只提供了一个将由模块用户使用的类,但是除了测试公共类之外,还有很多其他类中抽象的逻辑,我也想测试它们.
问题是Qt提出的运行测试的方法涉及到QTEST_MAIN宏:
QTEST_MAIN(TestClass)
#include "test_class.moc"
Run Code Online (Sandbox Code Playgroud)
最终,一个测试程序只能测试一个测试类.为模块中的每个类创建测试项目有点糟糕.
当然,人们可以看看QTEST_MAIN宏,重写它,并运行其他测试类.但有什么东西可以开箱即用吗?
到目前为止,我手工完成:
#include "one.h"
#include "two.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
TestOne one;
QTest::qExec(&one, argc, argv);
TestOne two;
QTest::qExec(&two, argc, argv);
}
Run Code Online (Sandbox Code Playgroud) 我们正在开发一个Qt应用程序,我们最终希望在某种程度上提升Web.为了更顺畅的过渡,我们考虑在HTML/javascript中使用QtWebKit开发用户界面.稍后,当我们在那里时,我们希望在Web应用程序中重用这些UI部分.
这听起来像是一个有意义的想法吗?在HTML/Javascript和QtGui中开发用户界面会有多复杂?这是一种常见的做法,还是没有?我们应该注意哪些陷阱?
我目前正试图围绕Scala进行思考,并打算将它用于我的下一个必须处理DICOM的项目.DICOM具有相当广泛的规范,涵盖了数千页的标准.我对DICOM的理解非常有限,但简而言之,DICOM对象 - IOD(信息对象定义)由模块组成,而模块是类型名称 - 值属性对的集合.一些模块和属性的可选性进一步复杂化.例如:
SimpleImageIOD: {
PatientModule: {
name: String
dateOfBirth: DateTime
}
StudyModule: {
name: String
date: DateTime (optional)
}
SeriesModule: {
name: String
}
ImageModule: {
height: Integer
width: Integer
pixelSize: Double (optional)
}
EquipmentModule: { (optional)
type: String
}
}
Run Code Online (Sandbox Code Playgroud)
有大量的模块,它们可能以各种组合形成不同的IOD.Scala反过来拥有大量的建模能力,包括所有特征,案例类,动态类等.你会如何在Scala中建模这样的域?我对语言很新,但我一直在考虑使用不可变的case类来定义模块,然后将它们聚合在各种IOD中,并使用镜头进行更新:
case class Patient(name: String, dateOfBirth: DateTime)
case class Study(name: String, date: Option[DateTime])
case class Series(name: String)
case class Image(height: Integer, width: Integer, pixelSize: Option[Double])
case class Equipment(type: String)
case class SimpleImageIOD(patient: Patient, study: Study, series: …Run Code Online (Sandbox Code Playgroud) 如果我在不同的编译单元中有两个静态变量,则不会定义它们的初始化顺序.这一课很好学.
我遇到的问题是:当第一个静态变量被初始化时,它们已经分配了所有静态变量.换一种说法:
static A global_a; // in compilation unit 1
static B global_b; // in compilation unit 2
struct A {
A() { b_ptr = &global_b; }
B *b_ptr;
void f() { b_ptr->do_something(); }
}
int main() {
global_a.f();
}
Run Code Online (Sandbox Code Playgroud)
b_ptr是否指向一个有效的内存块,其中B是在执行main函数时分配和初始化的?在所有平台上?
更长的故事:
编译单元1是Qt库.另一个是我的申请.我有几个QObject派生类,我需要能够通过类名字符串实例化.为此我想出了一个模板化的工厂类:
class AbstractFactory {
public:
virtual QObject *create() = 0;
static QMap<const QMetaObject *, AbstractFactory *> m_Map;
}
QMap<const QMetaObject *, AbstractFactory *> AbstractFactory::m_Map; //in .cpp
template <class T>
class ConcreteFactory: public AbstractFactory {
public:
ConcreteFactory() { AbstractFactory::m_Map[&T::staticMetaObject] …Run Code Online (Sandbox Code Playgroud) 是否可以设置html5日期时间输入的样式?
<input type="datetime" value="2011-08-18T16:49Z">
Run Code Online (Sandbox Code Playgroud)
此ISO日期时间格式不易过度阅读.是否可以使用CSS或其他方式使用某种模式格式化值的表示?
编辑:我刚才意识到这个问题取决于浏览器.例如,Opera使用一个很好的控件来实现这个标签,用户无法输入无效的日期.然后,浏览器将生成格式正确的W3C日期时间字符串,并将其发送到服务器.Firfox 6仅提供标准输入,并不关心输入的内容.Chrome有一个普通的输入字段,但在表单提交之前需要输入有效的w3C字符串.
所以我的问题可能没有任何意义.所以我会问另一个:是否有任何标准化这些自定义输入字段的功能/表示的浏览器指南?
我正在尝试编写一个查询模板,如下所示:
val byIdentifier = for {
(identifier, issuer) <- Parameters[(String, String)]
o <- Objects if (o.identifier === identifier) && (o.identifierIssuer === issuer)
} yield o
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
def findByIdentifier(id: String, issuer: String): Option[Object] =
byIdentifier(id, issuer).firstOption
Run Code Online (Sandbox Code Playgroud)
Objects 是一个提升嵌入的表:
case class Object(val identifer: String, val identifierIssuer: String)
object Objects extends Table[Object]("objects") {
def identifier = column[String]("identifier")
def identifierIssuer = column[String]("identifier_issuer")
...
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是findByIdentifier("asdf", "weqr")产生一个带有以下where子句的查询false:
select ... from "objects" where false
Run Code Online (Sandbox Code Playgroud)
我的查询模板中缺少什么才能进行正确的查询?