我在想如何用varargs来讨论一个方法,我意识到我甚至没有直觉知道如何去做.理想情况下,它会让您随时开始使用它,然后以可迭代结束它.
def concat(strs: String*) = strs.mkString
val curriedConcat = concat.curry
curriedConcat("OK")("hello", "world")("welcome")(Seq(): _*)
Run Code Online (Sandbox Code Playgroud)
scala中是否支持此功能?我无法弄清楚如何做任何事情,而不是将它绑定到长度为N的函数,然后咖喱.
JMH看起来像卡尺一样或者比卡尺更好,但是我无法弄清楚如何测量分配率,这对于能够在微基准测试中看是非常有用的.JMH是衡量分配率的错误工具吗?
我有几个不同的特征实现,我想测试,测试只使用特征的方法签名,所以我似乎应该能够使用参数化测试.但是,specs2网站似乎没有描述编写参数化测试的简单方法.最接近的是如何"共享示例",但您仍然需要编写测试和测试代码的每个组合,我希望能够指定:
A.测试
B.要测试的类
这可以单独指定,但将测试两者的笛卡尔积.
redis中排序集和列表之间的空间差异是什么?我的猜测是有序集是某种平衡的二叉树,列表是链表.这意味着除了我为每个值编码的三个值之外,密钥,分数,值,虽然我将链接列表的得分和值组合在一起,但开销是链接列表需要跟踪一个其他节点和二叉树需要跟踪两个节点,因此使用有序集合的空间开销是O(N).
如果我的值和得分都是长的,并且指向其他节点的指针也很长,那么在64位计算机上,单个节点的空间开销似乎从3长到4长,这是33%增加空间.
这是真的?
街上的一句话是,如果你不能保留你在内存中使用的索引,那么MongoDB会变慢.这如何与分片一起使用?分片是否仅在内存中保留自己的BTree,或者每个分片是否需要将整个集合的索引保留在内存中?
试图弄清楚MongoDB Arbiter要申请什么样的机器,以便我可以设置副本集.所有它需要做的是在机器停机时投票,对吧?使用micro EC2实例可能有任何问题吗?
在创建函数时,函数范围之外的变量如何被拉入函数中?我尝试反编译,但我无法理解它.它看起来像是使用了putfield.putfield是否指向对象引用?
所以我一直在尝试用Scala的解析器编写一个计算器,它很有趣,除了我发现操作符关联性是倒退的,当我试图让我的语法左递归时,即使它完全是明确的,我得到了堆栈溢出.
为了澄清,如果我有一个规则,如:def减法:Parser [Int] = num~" - "~add {x => x._1._1 - x._2}然后评估7 - 4 - 3出来是6而不是0.
我实际实现这个的方式是我正在组成一个二叉树,其中运算符是非叶节点,叶节点是数字.我评估树的方式是留给孩子(操作员)的右孩子.在为7 - 4 - 5构建树时,我希望它看起来像是:
-
- 5
7 4 NULL NULL
Run Code Online (Sandbox Code Playgroud)
其中 - 是根,其子节点是 - 和5,第二个孩子是7和4.
但是,我能够轻松构建的唯一树是
-
7 -
NULL NULL 4 5
Run Code Online (Sandbox Code Playgroud)
这是不同的,而不是我想要的.
基本上,简单的括号是7 - (4 - 5),而我想要(7 - 4) - 5.
我怎么能破解这个?无论如何,我觉得我应该能够编写一个具有正确运算符优先级的计算器.我应该首先对所有内容进行标记,然后反转我的令牌吗?我是否可以通过抓住正确孩子的所有左子女并让他们成为正确孩子的父母的正确孩子并让父母成为前右孩子的左孩子来翻转我的树?它在第一次近似似乎很好,但我并没有真正考虑过它.我觉得必须有一些我不知道的情况.
我的印象是我只能使用scala解析器创建一个LL解析器.如果您了解其他方式,请告诉我!
scala ×4
mongodb ×2
amazon-ec2 ×1
closures ×1
currying ×1
decompiling ×1
in-memory ×1
indexing ×1
jmh ×1
linked-list ×1
ll-grammar ×1
operators ×1
parsing ×1
redis ×1
replication ×1
scalability ×1
sharding ×1
sortedset ×1
specs2 ×1
unit-testing ×1