我遇到了以下行为:
ghci :m +Data.List
ghci> groupBy (\x y -> succ x == y) [1..6]
[[1,2], [3,4], [5,6]]
ghci> groupBy (\x y -> succ x /= y) [1..6]
[[1], [2], [3], [4], [5], [6]]
ghci :m +Data.Char -- just a test to verify that nothing is broken with my ghc
ghci> groupBy (const isAlphaNum) "split this"
["split"," this"]
Run Code Online (Sandbox Code Playgroud)
令我感到惊讶的是,我认为,基于下面的示例,groupBy每当谓词评估True为提供给谓词的两个连续元素时,就会拆分列表.但是在上面的第二个例子中,它会在每个元素上拆分列表,但谓词应该评估为False.我想到了它在Haskell中是如何工作的假设,所以每个人都理解我认为它是如何工作的:
groupBy :: (a -> a -> Bool) -> [a] -> [[a]]
groupBy p l@(x:y:ys)
| p …Run Code Online (Sandbox Code Playgroud) 注释提供了一种有趣的方式来显示结构最终如何在内存中布局。它还表示,对于默认表示,不提供任何保证。虽然我可以使用std::mem::align_ofand检查对齐和大小std::mem::size_of,但有没有办法获得 Rust 布局我的结构/枚举的确切方式,例如带有字段名称和偏移量的表?
我尝试通过扩展运算符语法在getter中创建混合到JS对象中,但它似乎总是返回null.
HTML:
<body>
<div id="wrapperA"></div>
<div id="wrapperB"></div>
</body>
<script src='./test.js'></script>
Run Code Online (Sandbox Code Playgroud)
JS:
"use strict";
const mixin = {
get wrapper() { return document.getElementById(this.wrappername); }
}
const wrapperA = {
wrappername: 'wrapperA',
...mixin
}
const wrapperB = {
wrappername: 'wrapperB',
...mixin
}
console.log(wrapperA);
console.log(wrapperB);
Run Code Online (Sandbox Code Playgroud)
控制台输出:
{wrappername: "wrapperA", wrapper: null}
{wrappername: "wrapperB", wrapper: null}
Run Code Online (Sandbox Code Playgroud)
这链接到一个应该工作的扩展函数,从我可以告诉上面的代码创建一个无意的闭包.但是,与...语法相比,它的读取效果非常差.有人知道如何让代码与后一种解决方案一起使用吗?ES开发者是否知道这个问题并将在ES7中修复?
执行99-Haskell问题的第三个(我目前正在尝试学习该语言)我尝试将模式匹配以及递归合并到我的函数中,现在看起来像这样:
myElementAt :: [a] -> Int -> a
myElementAt (x ++ xs) i =
if length (x ++ xs) == i && length xs == 1 then xs!!0
else myElementAt x i
Run Code Online (Sandbox Code Playgroud)
哪能给我Parse error in pattern: x ++ xs.问题:
注意:我知道这是一个非常糟糕的算法,但我自己设定了编写该函数的挑战,包括递归和模式匹配.我也试过不使用!!运算符,但这对我来说很好,因为它真正做的唯一事情(或者如果编译它应该做)是将单元素列表转换为该元素.
该os.Stat(path string) (os.FileInfo, error)函数是否(尝试)打开位于 的文件path,或者是否涉及任何技巧以使其不需要?
另外,多次打开/关闭文件的性能损失是什么(没有读/写,我知道这些很慢),而不是只执行一次?是硬盘绑定的吗?操作系统之间有区别吗?
基元应照常按值传递,并且应复制通过引用传递的任何内容(“借用”)。就像是:
let a = 7;
let b = duplicate(a); // let b = a;
let a = struct{}{};
let b = duplicate(a); // let b = a.clone();
Run Code Online (Sandbox Code Playgroud)
假设Rust中的每个值都实现Clone或Copy特质。这个假设是真的吗?如果没有,是不是可以定义一个特点Duplicate是类型的enum { Clone, Copy }?