在Scala中,PartialFunction[A, B]
类派生自类型Function[A, B]
(请参阅Scala参考,12.3.3).然而,这对我来说似乎违反直觉,因为a Function
(需要为所有人定义A
)具有比a更严格的要求PartialFunction
,这在某些地方可能是不确定的.
我遇到的问题是,当我有部分功能时,我不能使用a Function
来扩展部分功能.例如.我不能做:
(pf orElse (_)=>"default")(x)
Run Code Online (Sandbox Code Playgroud)
(希望语法至少是远程正确的)
为什么这个子类型反向完成?是否有任何我忽略的原因,比如这些Function
类型是内置的?
顺便说一句,如果是Function1 :> Function0
这样我也不需要在上面的例子中使用伪参数:-)
通过两个例子可以强调两种方法之间的区别.哪一个是对的?
一:
val zeroOne : PartialFunction[Float, Float] = { case 0 => 1 }
val sinc = zeroOne orElse ((x) => sin(x)/x) // should this be a breach of promise?
Run Code Online (Sandbox Code Playgroud)
二:
def foo(f : (Int)=>Int) {
print(f(1))
}
val bar = new PartialFunction[Int, Int] {
def apply(x : Int) = x/2 …
Run Code Online (Sandbox Code Playgroud) 理解XMLHttpRequest
处理程序时遇到一些问题.规范说明了这个onerror
处理程序:
error
[Dispatched ...]请求失败时.
load
[Dispatched ...]请求成功完成后.
问题是,"请求失败了"是什么意思.那可能是
此外,我想知道它是否意味着onerror
并且onload
永远不应该同时开火.
此引用表示onerror
应根据status
代码执行处理程序并onload
依赖于readyState
.这表明它们并不相互排斥,但是,我不认为这是一个权威的信息.
我问,因为使用最新的Opera快照,我发现onload
甚至在404状态代码上被解雇.我知道测试status
是一个肯定的赌注,但我想知道这是我必须按照规范做什么,或者只是解决Opera中的错误.
我正在尝试从 zsh 终端运行 Metal 可执行文件,以便对 GWAS 数据进行元分析。我的可执行文件位于正确的目录中,并且已检查它是否由于截断而不是 0MB。
可重现:从http://csg.sph.umich.edu/abecasis/metal/download/下载 Linux 文件
在终端中:
PATH TO EXECUTABLE ./metal
zsh: exec format error: ./metal
Run Code Online (Sandbox Code Playgroud) numeric_limits :: digits10的确切含义是什么?stackoverflow中的一些其他相关问题使我认为它是double的最大精度,但是
这是原型:
#include <float.h>
#include <limits>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
int main(int argc, const char* argv[]) {
std::ostringstream os;
//int digit10=std::numeric_limits<double>::digits10; // ==15
//int digit=std::numeric_limits<double>::digits; // ==53
os << std::setprecision(17);
os << DBL_MAX;
std::cout << os.str();
std::stringbuf sb(os.str());
std::istream is(&sb);
double readDouble=0.0;
is >> readDouble;
bool success = fabs(DBL_MAX-readDouble)<0.1;
}
Run Code Online (Sandbox Code Playgroud) 在以下代码中:
int count(){
static int n(5);
n = n + 1;
return n;
}
Run Code Online (Sandbox Code Playgroud)
n
在第一次调用函数时,变量仅实例化一次.
应该有一个标志或其他东西,所以它只将变量初始化一次..我试着从gcc查看生成的汇编代码,但没有任何线索.
编译器如何处理这个?
我设置了一个测试用例来了解完美转发.
std::string inner(const std::string& str ) {
return "const std::string&";
}
std::string inner(std::string& str ) {
return "std::string&";
}
std::string inner(const std::string&& str ) {
return "const std::string&&";
}
std::string inner(std::string&& str ) {
return "std::string&&";
}
template <typename T> void outer(T&& t) {
std::cout << "t: " << t << std::endl;
std::cout << "perfect forward: " << inner(std::forward<T>(t)) << std::endl;
std::cout << std::endl;
}
void PerfectForwarding()
{
outer("literal");
outer(lvalue);
outer(constlvalue);
outer(rvalue());
outer(constrvalue());
}
Run Code Online (Sandbox Code Playgroud)
std::forward
按预期工作.当我实现我自己的没有身份的转发函数时,有趣的行为出现了:
template <typename T> T&& …
Run Code Online (Sandbox Code Playgroud) 我试图在Boost.Spirit中编写一个shell语言解析器.但是,我不清楚有关rule
s 语义的一些基本问题.
综观文档,有成员r.alias()
及r.copy()
的rule
.IIUC,这些成员应分别返回对规则的引用和规则内容的副本.但是,我没有明确说明当我在另一个规则的定义中使用该规则时会发生什么.从我的实验中,我发现相互递归规则可以通过以下方式定义:
rule<Iter> r1, r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;
Run Code Online (Sandbox Code Playgroud)
这表明规则是通过解析器表达式中的引用来获取的.问题是,当变量超出范围时它会做什么,例如:
rule<Iter> r1;
{
rule<Iter> r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;
}
... // use r1
Run Code Online (Sandbox Code Playgroud)
在同一个注释中,将从包含类型规则工作的rvalue的解析表达式中分配规则(r.copy()
也将是类型的右值rule
,不是吗)?例如.
rule<Iter> f() { return char_('a') << char_('b'); }
rule<Iter> r1 = ... << f();
Run Code Online (Sandbox Code Playgroud)
任何人都可以启发我rule
的副本和引用的详细语义,并可能纠正这篇文章中的任何误解吗?
我想知道成员类型如何在Scala中工作,以及如何关联类型.
一种方法是使关联类型成为类型参数.这种方法的优点是我可以规定类型的方差,我可以确定子类型不会改变类型.缺点是,我无法从函数中的类型推断出类型参数.
第二种方法是使关联类型成为第二种类型的成员,其问题是我不能在子类型的关联类型上规定边界,因此,我不能在函数参数中使用类型(当x: X,X#T可能与xT没有任何关系)
一个具体的例子是:
我有一个DAT特征(可能没有类型参数)
trait DFA[S] { /* S is the type of the symbols in the alphabet */
trait State { def next(x : S); }
/* final type Sigma = S */
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个函数来在输入序列上运行这个DFA,我想要
<% Seq[alphabet-type-of-the-dfa]
输入序列类型我试过这个:
def runDFA[S, D <: DFA[S], SQ <% Seq[S]](d : D)(seq : SQ) = ....
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了这里没有推断出类型S,所以我必须在每个调用站点上编写整个类型参数列表.
def runDFA[D <: DFA[S] forSome { type S }, SQ <% Seq[D#Sigma]]( ... same as above
Run Code Online (Sandbox Code Playgroud)
这不起作用(无效循环引用类型D ???(它是什么?)) …
我写了一个派生类QGraphicsScene
.在某一点上,我需要从场景中删除所有项目,我希望物品被物理销毁(析构函数被调用).我尝试了以下方法:
QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
QGraphicsItem *gi = all[i];
removeItem(gi);
delete gi; // warning at this line
}
Run Code Online (Sandbox Code Playgroud)
Qt Creator发出警告:警告:C4150:删除指向不完整类型'QGraphicsItem'的指针; 没有破坏者叫
我不知道为什么会这样.QGraphicsItem
有虚拟析构函数所以应该从内存中删除项目.
如果这不是正确的方法,我怎么能删除所有QGraphicsItem
的QGraphicsScene
?请注意,我知道删除场景后,所有项目也将被删除.但我想从场景中删除项目并绘制其他项目.我希望从内存中删除已删除的项目.
昨天我与老板讨论了在构建软件时优化的正确作用.从本质上讲,他的立场是优化需要成为整个开发过程中的主要关注点.
我的观点是你需要在开发过程中做出正确的算法决策,但你永远不应该在开发过程中计算周期.事实上,我对此感到非常强烈,我不得不离开谈话.我在"优化"的名义下看到了太多错误的编程决策,而且过多的错误代码以"这种方式更快"为借口辩护.
StackOverflow.com社区的想法是什么?
c++ ×5
scala ×2
ajax ×1
boost-spirit ×1
c ×1
c++11 ×1
javascript ×1
optimization ×1
qt ×1
static ×1
stl ×1
subtype ×1
type-systems ×1
types ×1
visual-c++ ×1
zsh ×1