小编Att*_*lio的帖子

Clojure中let和let*之间的区别

考虑以下宏:

(defmacro somemacro []
    (list 'let ['somevar "Value"] 'somevar))
Run Code Online (Sandbox Code Playgroud)

扩展它会产生以下结果:

(macroexpand '(somemacro))
Run Code Online (Sandbox Code Playgroud)

结果:

(let* [somevar "Value"] somevar)
Run Code Online (Sandbox Code Playgroud)

我有两个关于let*(带星号)的问题:

  • 这是什么意思?(特别是:它是否在某处记录?)
  • 为什么宏没有随着'正常'而扩展?(即,没有星号.)两者产生相同的结果(在我的实验中).有反例吗?

不幸的是,我找不到关于let*的任何"官方"文档,这就是我在这里问的原因.

我已经考虑过的来源:

(doc let*)  ; --> nil
(source let*)  ; --> source not found
Run Code Online (Sandbox Code Playgroud)
  1. https://clojuredocs.org/clojure.core - >我看到不让*在这里(虽然有例如列表*)
  2. https://clojuredocs.org/clojure.core/let - >在评论中只提到过一次,这对我来说并不完全清楚:

    Nota Bene:让Clojure就像让我们在Scheme中一样 - 每个init-expr都可以访问前面的绑定表单.(还有一个let*,但它或多或少都没有解构,实际上是底层实现.)

  3. 在Common Lisp中LET与LET* - >这个问题是关于常见的lisp,但也许它在Clojure中是一样的?
  4. 这个答案:https://stackoverflow.com/a/5084339/3398271

    在Clojure中,它基本上意味着"foo*就像foo,但有些不同,你可能想要foo".换句话说,这意味着该代码的作者无法为第二个函数提供更好的名称,因此他们只是在它上面打了一个星.

- >这是let和let*的情况吗?但如果是这样,问题仍然存在,究竟有什么区别?

  1. Scheme中let和let*有什么区别? - >这在Clojure中是一样的吗?

clojure

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

在 Java 中解析包含多部分/表单数据请求正文的字符串

问题陈述

我认为标题说明了一切:我正在寻找解析包含 multipart/form-data HTTP 请求正文部分的String的方法。即字符串的内容看起来像这样:

--xyzseparator-blah
Content-Disposition: form-data; name="param1"

hello, world
--xyzseparator-blah
Content-Disposition: form-data; name="param2"

42
--xyzseparator-blah
Content-Disposition: form-data; name="param3"

blah, blah, blah
--xyzseparator-blah--
Run Code Online (Sandbox Code Playgroud)

我希望得到的是一张parameters地图,或者类似的东西。

parameters.get("param1");    // returns "hello, world"
parameters.get("param2");    // returns "42"
parameters.get("param3");    // returns "blah, blah, blah"
parameters.keys();           // returns ["param1", "param2", "param3"]
Run Code Online (Sandbox Code Playgroud)

进一步的标准

  • 如果我不必提供分隔符(即 xyzseparator-blah在这种情况下),,但如果我必须这样做,我可以忍受它。
  • 我正在寻找基于库的解决方案,可能来自主流库(如“Apache Commons”或类似的东西)。
  • 我想避免推出自己的解决方案,但在目前阶段,恐怕我不得不这样做。原因:虽然上面的示例通过一些字符串操作来拆分/解析似乎微不足道,但真正的多部分请求主体可以有更多的标头。除此之外,我不想重新发明(更不用说重新测试!)轮子:)

替代方案

如果有一个满足上述条件的解决方案,但其输入是 ApacheHttpRequest而不是 a String,那也是可以接受的。(基本上,我确实收到了一个HttpRequest,但我使用的内部库是这样构建的,它将此请求的主体提取为字符串,并将其传递给负责进行解析的类。但是,如果需要的话,我也可以直接在HttpRequest.)

相关问题

无论我如何尝试通过 Google、SO 和其他论坛找到答案,解决方案似乎总是使用commons fileupload来浏览各个部分。例如:herehere、 …

java apache http multipart

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

配置 git commit 编辑器颜色

git的提交消息编辑器的第一行(和正文)的颜色配置参数是什么?(以防万一,我使用 vim 作为编辑器)。

我找到了许多相关资源,但没有一个提供指定此颜色的选项。(就记录而言,最相关的点击次数如下:

我开始怀疑必须在其他地方配置此选项(例如在 bash 或 vim 中)...

git vim

8
推荐指数
2
解决办法
5291
查看次数

Spring:没有限定符的 Autowire bean

是否可以在 spring 中自动装配没有给定限定符的 bean?用例是拥有所有 bean 的列表,但排除一个:

@Autowired
@NotQualifier("excludedBean")    // <-- can we do something like this?
List<SomeBean> someBeanList;


public class Bean1 implements SomeBean {}

public class Bean2 implements SomeBean {}

@Qualifier("excludedBean")
public class Bean3 implements SomeBean {}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中someList应该包含一个Bean1andBean2但不是的实例Bean3

(备注:我知道相反的方法会起作用,即向Bean1and添加一些限定符Bean2,然后使用该限定符自动装配。)

编辑:一些进一步的说明:

  • 所有 bean 都在 spring 上下文中(也被排除在外)。
  • 配置需要基于注解,而不是基于 xml。因此,例如关闭 autowired-candidate不起作用
  • bean 的自动装配能力必须保持一般。换句话说,我想从注入点中排除 bean List<SomeBean> someBeanList;,但我想在其他地方自动装配它。

java spring dependency-injection

7
推荐指数
2
解决办法
4000
查看次数

在Clojure中创建一个地图条目

什么是内置的 Clojure方法(如果有的话),以创建单个映射条目?

换句话说,我想要像(map-entry key value).换句话说,结果应该或多或少相当于(first {key value}).

备注:

  • 当然,我已经尝试过谷歌搜索,只找到了地图入口?但是,此文档没有链接的资源.
  • 我知道(first {1 2})返回[1 2],这似乎是一个向量.然而:
(class (first {1 2}))
; --> clojure.lang.MapEntry
(class [1 2])
; --> clojure.lang.PersistentVector
Run Code Online (Sandbox Code Playgroud)
  • 我检查了源代码,我知道MapEntryPersistentVector都扩展了APersistentVector(所以MapEntry也或多或少也是一个向量).但问题是,我是否可以MapEntry从Clojure代码创建实例.
  • 最后,但并非最不重要:"不,没有内置的方法在Clojure中做到这一点"也是一个有效的答案(我强烈怀疑是这种情况,只是想确保我不小心错过了什么).

clojure

7
推荐指数
2
解决办法
1192
查看次数

为什么静态变量的地址相对于指令指针?

我正在按照本教程关于装配.

根据教程(我也在本地尝试,并得到类似的结果),以下源代码:

int natural_generator()
{
        int a = 1;
        static int b = -1;
        b += 1;              /* (1, 2) */
        return a + b;
}
Run Code Online (Sandbox Code Playgroud)

编译到这些汇编指令:

$ gdb static
(gdb) break natural_generator
(gdb) run
(gdb) disassemble
Dump of assembler code for function natural_generator:
push   %rbp
mov    %rsp,%rbp
movl   $0x1,-0x4(%rbp)
mov    0x177(%rip),%eax        # (1)
add    $0x1,%eax
mov    %eax,0x16c(%rip)        # (2)
mov    -0x4(%rbp),%eax
add    0x163(%rip),%eax        # 0x100001018 <natural_generator.b>
pop    %rbp
retq   
End of assembler dump.
Run Code Online (Sandbox Code Playgroud)

(行号的意见(1),(2) …

c assembly gcc cpu-registers

6
推荐指数
1
解决办法
1295
查看次数

React-Virtualized table 增长到最大高度

问题:我想要一个可以占用最大高度空间的React Virtualized 表(假设500px)。我想在表格最后一个可见行的正下方添加另一个元素。不知怎的,像这样:

If the content of the table is shorter than 500px

+-----------------------------------------+    ----+
| Header1 | Header2 | ...                 |        |
+---------+---------+---------------------+        |  less than 500px,
| row1    | row1    | row1                |        |  say 200px
+---------+---------+---------------------+        |
| row2    | row2    | row2                |        |
+---------+---------+---------------------+    ----+
Other content


If the content of the table is longer than 500px

+-----------------------------------------+^   ----+
| Header1 | Header2 | ...                 ||       |
+---------+---------+---------------------+| …
Run Code Online (Sandbox Code Playgroud)

html css reactjs

5
推荐指数
1
解决办法
4858
查看次数

在 Golang 中使用类型别名声明函数

在 Golang 中可以做这样的事情吗?

package main

import "fmt"

type myFunType func(x int) int

var myFun myFunType = myFunType { return x }  // (1) 

func doSomething(f myFunType) {
    fmt.Println(f(10))
}

func main() {
    doSomething(myFun)
}
Run Code Online (Sandbox Code Playgroud)

换句话说,是否可以使用函数类型别名声明函数类型变量而不重复签名?或者,有没有办法在创建函数类型的变量时不总是重新输入整个函数签名

上面的代码示例,我希望它等同于下面的代码示例(用 line 替换(1)line (2)),导致编译错误syntax error: unexpected return, expecting expression

package main

import "fmt"

type myFunType func(x int) int 

var myFun myFunType = func(x int) int { return 2 * x } // (2)

func doSomething(f myFunType) …
Run Code Online (Sandbox Code Playgroud)

function go type-alias

4
推荐指数
1
解决办法
1935
查看次数

Git 重命名文件和 inode

考虑一下我们将以下命令应用于hello.txtgit 下跟踪的文件(在干净的工作副本中):

echo "hi" >> hello.txt
mv hello.txt bye.txt
git rm hello.txt
git add bye.txt
git status
Run Code Online (Sandbox Code Playgroud)

结果:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    hello.txt -> bye.txt
Run Code Online (Sandbox Code Playgroud)

因此,git 知道它是同一个文件,即使它被重命名了。我有一些模糊的记忆,git 检查 inode 以确定新文件与旧的已删除文件相同。 不过,这个这个SO 答案表明 git 只检查文件的内容,并且不会以任何方式检查它是否是相同的 inode。(我的结论(*):如果我对文件进行更大的修改,git 将不会检测到重命名,即使 inode 仍然相同。)

因此,在我看来,很明显,我错了,git 不检查 inode(或任何其他文件系统信息),只检查内容。但后来,我发现了另一个答案,它声称

除了时间戳之外,它[即git]还记录lstat的大小、inode和其他信息,以减少误报的机会。当您执行 git-status 时,它只需对工作树中的每个文件调用 lstat 并比较元数据,以便快速确定哪些文件未更改。

我对此实际上有两个问题:

  1. 我下面的理解正确吗?

Git 确实依赖(也)依赖 inode 来检测文件是否已更改,但它不使用 inode 来检测文件重命名。

  1. 假设 1. 是正确的。为什么 git 不依赖 inode …

git file-rename

3
推荐指数
1
解决办法
1322
查看次数

gdb“信息框架”中没有 epb/eip 寄存器

语境

info frame在我的机器上发出命令时(断点打开main),输出如下:

(gdb) info frame
Stack level 0, frame at 0x7fffffffdbd0:
 rip = 0x4005b1 in main; saved rip = 0x7ffff7a53b05
 Arglist at 0x7fffffffdbc0, args: 
 Locals at 0x7fffffffdbc0, Previous frame's sp is 0x7fffffffdbd0
 Saved registers:
  rbp at 0x7fffffffdbc0, rip at 0x7fffffffdbc8
Run Code Online (Sandbox Code Playgroud)

当我从了解这个答案eipebp寄存器(在我的输出不存在),具有以下含义:

eip 是执行下一条指令的寄存器(也称为程序计数器)

“ebp”是通常被认为是这个栈帧的locals的起始地址的寄存器,它使用“offset”来寻址

另一个答案中,我明白

【RIP是】指令指针

[...]

其中一些寄存器被设想用于特定用途,并且通常如此。最关键的是 RSP 和 RBP。

最后,info registers给我以下输出:

(gdb) info registers
rax            0x4005ad 4195757
rbx            0x0      0
rcx            0x0      0
rdx …
Run Code Online (Sandbox Code Playgroud)

c x86 gdb buffer-overflow

2
推荐指数
1
解决办法
2026
查看次数

Clojure with-local-vars关闭

在Clojure中,变量是with-local-vars通过闭包来定义的吗?

考虑以下示例:

(defn foo []
      (with-local-vars [bar 10]
           (fn [] @bar)))

((foo))
Run Code Online (Sandbox Code Playgroud)

结果如下:

#object[clojure.lang.Var$Unbound 0x131f68d8 "Unbound: #<Var: --unnamed-->"]
Run Code Online (Sandbox Code Playgroud)

(相反,我期待得到10.)

Cf具有以下内容:

(defn foo []
     (with-local-vars [bar 10] @bar))
(foo)
Run Code Online (Sandbox Code Playgroud)

结果:10.

基于文档,我不清楚,如果在Clojure中使用如上所述的本地变量是有效的,但我怀疑答案是否定的.你能否确认一下(或反驳,并解释我在第一个例子中做错了什么)?如果我的假设是明确的(即,本地变量不能用于闭包),那么解释原因是什么?

编辑:对于记录,这是我试图解决的问题.

closures clojure

2
推荐指数
1
解决办法
210
查看次数

在Java中,相同类型但不同类型参数的空集合总是相等吗?

考虑以下片段:

    List<String> list1 = new ArrayList<>();
    List<Integer> list2 = new ArrayList<>();
    assertThat(list1.equals(list2), is(true));
Run Code Online (Sandbox Code Playgroud)

断言成功。

事实上,据我了解,equals由于运行时类型擦除(即类型参数StringInteger只能在编译时访问,但不能在编译时访问), Java 中的方法无法区分两者。在运行时)。由于没有可以比较的元素,因此equals必须返回 true。按照这个思路,对于所有集合来说,这一定是正确的。

所以问题是:我的思维过程是正确的,还是我遗漏了什么?

编辑

@qqilihq 给出了一个很好的答案,这引发了下一个问题:这是否可以在不显式传递类型的情况下实现(如果类型以某种方式显式存储,我很好,只是用户不必传递它。)

我尝试了以下操作,但它不起作用(我猜是由于类型擦除):

    public TypedList(List<T> delegate) {
        this.delegate = Objects.requireNonNull(delegate);
        this.type = (Class<T>) delegate.getClass();
    }
Run Code Online (Sandbox Code Playgroud)

但也许你可以做类似的事情?this.type = T。(这不能编译,但也许类似的事情是可能的。)

java generics equals

2
推荐指数
1
解决办法
336
查看次数

如何使用浅背景的Go覆盖HTML?

请考虑以下命令:

go tool cover -html=coverage.out
Run Code Online (Sandbox Code Playgroud)

有没有办法让结果HTML在灯光下变暗(而不是在深色背景上的默认灯光字符)?

我既没有在文档中也没有在其中引用的帮助页面中找到任何相关内容(go tool cover --helpgo help testflag)

code-coverage report go

1
推荐指数
2
解决办法
117
查看次数