在Scala中,可以像这样编写(curried?)函数
def curriedFunc(arg1: Int) (arg2: String) = { ... }
Run Code Online (Sandbox Code Playgroud)
上述curriedFunc函数定义与两个参数列表和单个参数列表中具有多个参数的函数之间有何区别:
def curriedFunc(arg1: Int, arg2: String) = { ... }
Run Code Online (Sandbox Code Playgroud)
从数学的角度来看,这是(curriedFunc(x))(y),curriedFunc(x,y)但我可以写def sum(x) (y) = x + y,同样的def sum2(x, y) = x + y
我只知道一个区别 - 这是部分应用的功能.但这两种方式对我来说都是等同的.
还有其他差异吗?
我找到了简单的例子:
class Post extends LongKeyedMapper[Post] with IdPK {
def getSingleton = Post
object title extends MappedText(this)
object text extends MappedText(this)
object date extends MappedDate(this)
}
object Post extends Post with LongKeyedMetaMapper[Post] {
def getPosts(startAt: Int, count: Int) = {
Post.findAll(OrderBy(Post.date, Descending), StartAt(startAt), MaxRows(count))
}
def getPostsCount = Post.count
}
Run Code Online (Sandbox Code Playgroud)
这是什么意思with IdPK?
谢谢.
在我的算法中,我需要创建信息输出.我必须在bmp文件中写入布尔矩阵.它必须是单色图像,如果此元素上的矩阵为真,则像素为白色.主要问题是bmp标头以及如何写这个.
我有N个矩形,其边与x轴和y轴平行.还有另一个矩形模型.我需要创建一个算法来判断模型是否被N个矩形完全覆盖.
我有一些想法.我认为首先,我需要通过左侧对矩形进行排序(可以在O(n log n)时间内完成),然后使用垂直扫描线.
+------------------------------------------------------------> x
|O
| +----+
| +---------+ | |
| | ++----+--+ |
| | +-++----+-+| |
| | | | +-++-+
| +------+ +-------++
| +---------+
|
|
|
|y
Run Code Online (Sandbox Code Playgroud)
蓝色矩形是模型.
首先,我需要抽象算法.对于实现没有特殊要求.矩形可以表示为一对点(左上角和右下角).
这是准备测试的任务之一.我知道最好的算法可以在O(n log n)时间内完成.
尝试测试我的方法时出现以下错误:
TypeError:无法调用未定义的方法'json'
下面是我的代码,如果我从测试方法中删除res.status,我会得到"status"的相同错误.
我如何定义'json'所以我没有得到一个异常抛出:
res.status(404)上传.json(误差);
在测试此功能时.
stores.js
{ //the get function declared above (removed to ease of reading)
// using a queryBuilder
var query = Stores.find();
query.sort('storeName');
query.exec(function (err, results) {
if (err)
res.send(err);
if (_.isEmpty(results)) {
var error = {
message: "No Results",
errorKey: "XXX"
}
res.status(404).json(error);
return;
}
return res.json(results);
});
}
Run Code Online (Sandbox Code Playgroud)
storesTest.js
it('should on get call of stores, return a error', function () {
var mockFind = {
sort: function(sortOrder) {
return this;
},
exec: function (callback) …Run Code Online (Sandbox Code Playgroud) 我最近从 should.js 切换到 chai.js,因为我发现前者在基于浏览器的测试中造成了障碍。更改不需要对我的测试套件进行任何更改,因为支持语法,但我看到失败测试的输出不再以有用的方式向我显示实际值和预期值:
AssertionError: expected [ Array(9) ] to deeply equal [ Array(9) ]
Run Code Online (Sandbox Code Playgroud)
通过添加以下行,我可以让它吐出这些值的表示:
chai.config.truncateThreshold = 0;
Run Code Online (Sandbox Code Playgroud)
然而,这导致每个值都被详尽地输出,包括函数和原型属性。也很没用。
那么是否有某种方式让 chai 表现得像 should.js 一样,其中使用它们的 toString() 方法显示实际/预期值?
可能重复:
remove_if等效于std :: map
昨天我写了一个程序,它使用multiset来存储这样的元素:
std::multiset < boost::shared_ptr < CEntity > > m_Entities;
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用这样的标准算法remove_if:
std::remove_if(m_Entities.begin, m_Entities.end(), MarkedForDestroy);
Run Code Online (Sandbox Code Playgroud)
但是编译失败了,因为如果我们在GCC 4.4中看到set和multiset的实现,我们看到:
typedef typename _Rep_type::const_iterator iterator;
typedef typename _Rep_type::const_iterator const_iterator;
Run Code Online (Sandbox Code Playgroud)
我感到震惊.我这一刻谷歌更好,我发现这与标准不矛盾.集合相同.
如果标准算法不起作用,这怎么会不相矛盾?我怎样才能更好地更换容器?
我有这样的案例类:
abstract class Tree
case class Sum(l: Tree, r: Tree) extends Tree
case class Var(n: String) extends Tree
case class Const(v: Int) extends Tree
Run Code Online (Sandbox Code Playgroud)
现在我写这样的对象:
object Main {
type Environment = String => Int
def derive(t: Tree, v: String): Tree = t match {
case Sum(l, r) => Sum(derive(l, v), derive(r, v))
case Var(n) if (v == n) => Const(1)
case _ => Const(0)
}
def eval(t: Tree, env: Environment): Int = t match {
case Sum(l, r) => eval(l, …Run Code Online (Sandbox Code Playgroud)