我知道在STM事务中放置具有副作用的函数通常是不好的做法,因为它们可能被重试并多次调用.
然而,我发现你可以使用代理来确保只有在事务成功完成后才能执行副作用.
例如
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
Run Code Online (Sandbox Code Playgroud)
这是好习惯吗?
有哪些优点/缺点/陷阱?
在Clojure core.async中,通道和端口是一回事吗?如果不是有什么区别?在观看视频Timothy Baldridge - Core.Async时,他创建了一个频道
(def c (chan))
Run Code Online (Sandbox Code Playgroud)
然后
(<!! c)
Run Code Online (Sandbox Code Playgroud)
c
是渠道还是国家的文件<!!
(强调添加)
用法:(<!! port)从端口获取val .如果关闭,将返回nil.如果没有可用的话会阻止.
目前还不清楚核心.async文档.
我在文件中有这样的一行
Run Code Online (Sandbox Code Playgroud)<echo>The app vendor is... app.server.name</echo>
将光标放在"服务器"中的"r"上,如何在不进入可视模式的情况下拉动"app.server.name",或者不必猜测要抽出的单词数量.
yiw
只会在这些时期之间拉扯这个词.
我要为等效printf("%2.2x", var);
于cerr<<
在C++中.
码:
typedef unsigned char byte;
static byte var[10];
for(i=1; i<10; i++)
printf("%2.2x", var[i]);
Run Code Online (Sandbox Code Playgroud)
我的想法是将调试重定向到这样的文件:./myprog 2>out.txt
.
如果我不要求太多,我也想收到解释.
谢谢!
通常的做法是将常量空数组返回值提取为静态常量.像这儿:
public class NoopParser implements Parser {
private static final String[] EMPTY_ARRAY = new String[0];
@Override public String[] supportedSchemas() {
return EMPTY_ARRAY;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
可能这是出于性能原因而完成的,因为new String[0]
每次调用该方法时直接返回会创建一个新的数组对象 - 但它真的会吗?
我一直想知道这样做是否真的有可衡量的性能优势,或者它是否只是过时的民间智慧.空数组是不可变的.VM是否无法将所有空String
数组卷成一个?VM new String[0]
基本上没有成本吗?
将这种做法与返回一个空字符串进行对比:我们通常很乐意写return "";
,而不是return EMPTY_STRING;
.
我有一个类似于表的结构,其中列表示逻辑实体.对于我的用例,它是需要在视觉上分组的表行,最好是通过内联流动.
示例源片段:
<div>
<div id="entity1" class="entities">
<div>Ab</div>
<div>Cdefg</div>
</div>
<div id="entity2" class="entities">
<div>98224</div>
<div>511</div>
</div>
<div id="entity3" class="entities">
<div>????</div>
<div>?</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
所需的布局:
+----+-------+------+
| Ab | 98224 | ???? |
+----+--+----++---+-+
| Cdefg | 511 | ? |
+-------+-----+---+
Run Code Online (Sandbox Code Playgroud)
当然,很容易在服务器端转换文档纯粹是为了演示,但我想知道我是否可以保持文档层次结构并在(CSS)表示层上进行转换.它可能吗?
我通常可以在命令行模式下像这样猛拉:1,61y
,但是我怎么把它拉到"*
(剪贴板)寄存器?:"*1,61y
不起作用,:h c_y
什么都不显示.
当我用//
Java 编写注释时,按Enter键,vim有助于//
在下一行的开头添加一个.
// This is the first line of my comment <CR>
// <-- these were added automatically by auto-comment.
Run Code Online (Sandbox Code Playgroud)
正如我所说,这是有用的行为(我//
用于多行注释,以便很容易注释掉大块代码/*...*/
,并/**...*/
仅用于Javadoc注释).但是当我到达评论结束时,我必须按三次退格键才能摆脱//
我现在不再需要的行的开头.
是否有插入模式的键盘快捷键可以告诉Vim我不再写评论?或者我必须自己写?
我在STM32F107VC上使用FreeRTOS V6.1.1并且经常出现malloc错误.堆区域在链接器脚本中定义,但在几次分配后它仍然卡在pvPortMalloc()的这个循环中:
while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}
pxBlock: 0x20002300
pxPreviousBlock: 0x20002300
pxNewBlockLink: 0x00
xHeapHasBeenInitialised: 0x01
Run Code Online (Sandbox Code Playgroud)
链接器脚本:
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = 0x20010000; /* end of 64K RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = …
Run Code Online (Sandbox Code Playgroud) 如果我有以下列表:
List<String> list = Arrays.asList("hello", "world", "hello");
Run Code Online (Sandbox Code Playgroud)
我应用以下(Java8):
list.stream().distinct().collect(Collectors.toString());
Run Code Online (Sandbox Code Playgroud)
然后我会得到一个包含“hello”和“world”的列表。
但是,就我而言,我有一个类型列表(来自外部 api),我想在其中“绕过”equals 方法,最好使用比较器,因为它没有涵盖我需要的内容。
假设这个类看起来像这样:
public class Point {
float x;
float y;
//getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望将涵盖特定标准的两点定义为相等,例如 (30, 20) 和 (30.0001, 19.999)。
自定义比较器可以做到这一点,但我发现没有 API 可以执行 Java8 Stream 中的 distinct() 功能,而是使用比较器(或类似模式)。
有什么想法吗?我知道我可以编写这样的函数,但我更喜欢使用现有 apis 的优雅方式......我对外部库没有限制(番石榴、apache-commons 等,如果他们有一种舒适的方式,欢迎使用)我需要的)。
vim ×3
c ×2
clojure ×2
java ×2
agent ×1
arrays ×1
c++ ×1
collections ×1
concurrency ×1
core.async ×1
css ×1
dom ×1
freertos ×1
html ×1
java-stream ×1
malloc ×1
performance ×1
printf ×1
stm ×1
stm32 ×1
transactions ×1