考虑以下宏:
(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)
Nota Bene:让Clojure就像让我们在Scheme中一样 - 每个init-expr都可以访问前面的绑定表单.(还有一个let*,但它或多或少都没有解构,实际上是底层实现.)
在Clojure中,它基本上意味着"foo*就像foo,但有些不同,你可能想要foo".换句话说,这意味着该代码的作者无法为第二个函数提供更好的名称,因此他们只是在它上面打了一个星.
- >这是let和let*的情况吗?但如果是这样,问题仍然存在,究竟有什么区别?
我认为标题说明了一切:我正在寻找解析包含 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在这种情况下),,但如果我必须这样做,我可以忍受它。如果有一个满足上述条件的解决方案,但其输入是 ApacheHttpRequest而不是 a String,那也是可以接受的。(基本上,我确实收到了一个HttpRequest,但我使用的内部库是这样构建的,它将此请求的主体提取为字符串,并将其传递给负责进行解析的类。但是,如果需要的话,我也可以直接在HttpRequest.)
无论我如何尝试通过 Google、SO 和其他论坛找到答案,解决方案似乎总是使用commons fileupload来浏览各个部分。例如:here、here、 …
git的提交消息编辑器的第一行(和正文)的颜色配置参数是什么?(以防万一,我使用 vim 作为编辑器)。
我找到了许多相关资源,但没有一个提供指定此颜色的选项。(就记录而言,最相关的点击次数如下:
我开始怀疑必须在其他地方配置此选项(例如在 bash 或 vim 中)...
是否可以在 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,然后使用该限定符自动装配。)
编辑:一些进一步的说明:
List<SomeBean> someBeanList;,但我想在其他地方自动装配它。什么是内置的 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)
MapEntry也或多或少也是一个向量).但问题是,我是否可以MapEntry从Clojure代码创建实例.我正在按照本教程关于装配.
根据教程(我也在本地尝试,并得到类似的结果),以下源代码:
Run Code Online (Sandbox Code Playgroud)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.
(行号的意见(1),(2) …
问题:我想要一个可以占用最大高度空间的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) 在 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) 考虑一下我们将以下命令应用于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 并比较元数据,以便快速确定哪些文件未更改。
我对此实际上有两个问题:
Git 确实依赖(也)依赖 inode 来检测文件是否已更改,但它不使用 inode 来检测文件重命名。
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)
当我从了解这个答案,eip和ebp寄存器(在我的输出不存在),具有以下含义:
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) 在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中使用如上所述的本地变量是有效的,但我怀疑答案是否定的.你能否确认一下(或反驳,并解释我在第一个例子中做错了什么)?如果我的假设是明确的(即,本地变量不能用于闭包),那么解释原因是什么?
编辑:对于记录,这是我试图解决的问题.
考虑以下片段:
List<String> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
assertThat(list1.equals(list2), is(true));
Run Code Online (Sandbox Code Playgroud)
断言成功。
事实上,据我了解,equals由于运行时类型擦除(即类型参数String和Integer只能在编译时访问,但不能在编译时访问), 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。(这不能编译,但也许类似的事情是可能的。)
请考虑以下命令:
go tool cover -html=coverage.out
Run Code Online (Sandbox Code Playgroud)
有没有办法让结果HTML在灯光下变暗(而不是在深色背景上的默认灯光字符)?
我既没有在文档中也没有在其中引用的帮助页面中找到任何相关内容(go tool cover --help和go help testflag)