小编dav*_*ers的帖子

Clojure集合背后的数据结构是什么?

我最近听了Rich Hickey对软件工程广播的采访.在访谈期间,Rich提到Clojure的藏品是作为树木实施的.我希望用另一种语言实现持久性数据结构,并希望了解如何实现集合和Clojure的其他持久性数据结构.

在以下场景中,每个点的树会是什么样子?

  1. 创建集 {1 2 3}

  2. 建立联盟{1 2 3}{4}

  3. 创建的差异{1 2 3 4}{1}

我想了解如何产生的三组({1 2 3},{1 2 3 4},和{2 3 4})股权结构,而"删除"被如何处理.

我还想知道节点可能拥有的最大分支数.Rich在访谈中提到树木很浅,所以大概是分支因子大于2.

clojure immutability data-structures

16
推荐指数
3
解决办法
4719
查看次数

将shell配置为始终在新行上打印提示,如zsh

如果命令的输出不以a结尾\n,则后续的提示会立即显示:

$ echo -n hai
hai$
Run Code Online (Sandbox Code Playgroud)

我刚刚注意到一位同事的shell(zsh,它的价值)被配置为打印一个%(背景和前景颜色反转为强调),然后\n在这种情况下:

$ echo -n hai
hai%
$
Run Code Online (Sandbox Code Playgroud)

我也想这样做.我用Bash.这可能吗?如果是这样,我将添加到〜/ .bashrc中?


UPDATE

我花了几个小时了解gniourf_gniourf的解决方案是如何工作的.我将在这里分享我的发现,以防它们对其他人有用.

这是我的.bashrc中的相关片段:

set_prompt() {
  # CSI 6n reports the cursor position as ESC[n;mR, where n is the row …
Run Code Online (Sandbox Code Playgroud)

bash shell prompt

15
推荐指数
1
解决办法
3356
查看次数

为什么JavaScript Arguments对象通过赋值给参数而变异?

这种行为背后的理由是什么?

function f(x) {
  console.log(arguments[0]);
  x = 42;
  console.log(arguments[0]);
}

f(1);
// => 1
// => 42
Run Code Online (Sandbox Code Playgroud)

也许这是一个真正的错误.ECMAScript规范的哪个部分定义了这种行为?

javascript ecmascript-5

14
推荐指数
2
解决办法
1240
查看次数

将JavaScript AST中的注释替换为从注释内容派生的子树

我是针对JavaScript和CoffeeScript 的doctest,快速和脏的doctests的作者.我想通过使用JavaScript解析器而不是正则表达式来查找注释来减少库的脏污.

我想使用EsprimaAcorn来执行以下操作:

  1. 创建一个AST
  2. 遍历树,并为每个注释节点:
    1. 从注释节点的文本创建AST
    2. 用此子树替换主树中的注释节点

输入:

!function() {

  // > toUsername("Jesper Nøhr")
  // "jespernhr"
  var toUsername = function(text) {
    return ('' + text).replace(/\W/g, '').toLowerCase()
  }

}()
Run Code Online (Sandbox Code Playgroud)

输出:

!function() {

  doctest.input(function() {
    return toUsername("Jesper Nøhr")
  });
  doctest.output(4, function() {
    return "jespernhr"
  });
  var toUsername = function(text) {
    return ('' + text).replace(/\W/g, '').toLowerCase()
  }

}()
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.Acorn提供了一个walker,它接受一个节点类型和一个函数,并在每次遇到指定类型的节点时遍历调用该函数的树.这似乎很有希望,但不适用于评论.

使用Esprima我可以esprima.parse(input, {comment: true, loc: true}).comments用来获取评论,但我不知道如何更新树.

javascript parsing abstract-syntax-tree

13
推荐指数
1
解决办法
1978
查看次数


从不一致的JavaScript对象创建PureScript记录

假设我的PureScript代码中的用户记录具有以下类型:

{ id        :: Number
, username  :: String
, email     :: Maybe String
, isActive  :: Boolean
}
Run Code Online (Sandbox Code Playgroud)

CommonJS模块源自PureScript代码.导出的用户相关函数将从外部JavaScript代码调用.

在JavaScript代码中,"用户"可以表示为:

var alice = {id: 123, username: 'alice', email: 'alice@example.com', isActive: true};
Run Code Online (Sandbox Code Playgroud)

email可能是null:

var alice = {id: 123, username: 'alice', email: null, isActive: true};
Run Code Online (Sandbox Code Playgroud)

email 可省略:

var alice = {id: 123, username: 'alice', isActive: true};
Run Code Online (Sandbox Code Playgroud)

isActive可以省略,在这种情况下,假设true:

var alice = {id: 123, username: 'alice'};
Run Code Online (Sandbox Code Playgroud)

id 遗憾的是有时候是一个数字字符串:

var alice = {id: '123', username: 'alice'};
Run Code Online (Sandbox Code Playgroud)

上面的五个JavaScript表示是等效的,应该生成等效的PureScript记录.

如何编写一个带有JavaScript对象并返回用户记录的函数? …

purescript

11
推荐指数
2
解决办法
1385
查看次数

如何在Interface Builder中向NSMenu添加其他项?

我是第一次使用Xcode.我一直在关注一个教程,我完全被那些肯定微不足道的东西所困扰.我已将"菜单"从库中拖到我的"MainMenu.xib"窗口中.双击此菜单即可显示.

Interface Builder中的默认NSMenu

到目前为止没有麻烦.编辑这三个项目非常直观,删除项目也是如此.但是我怎么在这个菜单中添加一个项目呢?

xcode interface-builder

10
推荐指数
1
解决办法
8833
查看次数

在Django模板中动态创建列表

我不知道是否可能,但我希望能够写出如下内容:

{% with var1 var2 var3 as some_list %}
    {{ some_list|maximum }}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

从任意数量的模板变量和/或文字中动态创建列表似乎很有用,所以我希望我忽略了一些简单的事情.

但是,如果不这样做,我想知道如何创建一个接受任意数量参数的模板标签.(我玩过simple_tag,适用于接受固定数量参数的标签.)

我不想去创建解析器和子类化的麻烦,django.template.Node直到我确定没有更简单的解决方案.

django django-templates

9
推荐指数
1
解决办法
9639
查看次数

Express:顶级路径的可选尾部斜杠

更新:我的问题没有准确地传达我想要实现的目标.我希望匹配/foo,/foo/以及/foo/(例如/foo/asdf/jkl)下的任何内容,而不是具体的给定路径.最初的问题如下.


我想匹配以下路径:

/foo
/foo/bar
/foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

这些也应该有用:

/foo/          ->  /foo
/foo/bar/      ->  /foo/bar
/foo/bar/baz/  ->  /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

app.get('/foo/*', ...);
Run Code Online (Sandbox Code Playgroud)

但是,这种情况失败了/foo.我知道我可以提供正则表达式而不是字符串,但这肯定是一个常见的要求,所以我会惊讶地发现模式匹配的DSL不适应它.

routing node.js express

9
推荐指数
3
解决办法
5086
查看次数

npm在特定环境中从GitHub安装

我的团队使用私人npm注册表.我们在本地开发和部署到生产时从这个私有注册表安装包.但是,在部署到分段时,我们想从GitHub中取出.我认为这可以使用preinstall重写package.json的脚本来使用适当的git + ssh:// URL代替版本号,如果NODE_ENV = staging.

这似乎不起作用,可能是因为npm忽略了对package.json所做的更改(已经需要它).

也许我会以完全错误的方式解决这个问题.实现这一目标的推荐方法是什么?

installation github node.js npm

9
推荐指数
1
解决办法
1076
查看次数