小编con*_*ons的帖子

如何在单引号字符串中转义单引号?

比方说,你有一个alias像bash 一样:

alias rxvt='urxvt'
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

然而:

alias rxvt='urxvt -fg '#111111' -bg '#111111''
Run Code Online (Sandbox Code Playgroud)

不会起作用,也不会:

alias rxvt='urxvt -fg \'#111111\' -bg \'#111111\''
Run Code Online (Sandbox Code Playgroud)

那么,一旦转义了引号,你最终如何在字符串中匹配开头和结尾的引号?

alias rxvt='urxvt -fg'\''#111111'\'' -bg '\''#111111'\''
Run Code Online (Sandbox Code Playgroud)

看起来很笨拙虽然如果你允许这样连接它们就会代表相同的字符串.

syntax bash quoting

936
推荐指数
15
解决办法
40万
查看次数

Mathematica的Thread函数的语义,有人需要最终让它休息

Wolfram Research在过去8年中至少拥有与此功能相同的文档:

Thread[f[args]]
Run Code Online (Sandbox Code Playgroud)

"线程"f出现在args中的任何列表.

如果我见过一个可爱的圆形定义.

有谁知道实际的语义是什么,并能提供非循环的正确解释?

functional-programming wolfram-mathematica

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

log4j将所有日志输出定向到stdout,即使它不应该

在我的log4j.properties中,我有:

log4j.rootLogger=DEBUG,stdout

log4j.logger.notRootLogger=DEBUG,somewhereelse
Run Code Online (Sandbox Code Playgroud)

appender stdout和somewhereelse都配置正确,stdout写入控制台,somewhereelse写入文件.

在每个类的代码中,我都设置了:

static Logger log =  Logger.getLogger("notRootLogger);
Run Code Online (Sandbox Code Playgroud)

^当我不想要东西进入控制台.

-要么-

static Logger log = Logger.getRootLogger();
Run Code Online (Sandbox Code Playgroud)

我什么时候.

我在log4.properties中需要做些什么来停止写入notRootLogger以stdout结尾的内容?根记录器写入的地方是否有某种继承需要以某种方式关闭?

我不想单独为每个单独的类配置一个记录器,我只想记录到控制台.

java log4j

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

如何在Perl中设置文件读取缓冲区大小以针对大文件进行优化?

据我所知,Java和Perl在读取文件时都很难找到一个适合所有默认缓冲区大小的内容,但是我发现他们的选择越来越过时,并且在更改默认选择时遇到问题Perl的.

在Perl的情况下,我认为默认情况下使用8K缓冲区,类似于Java的选择,我找不到使用perldoc网站搜索引擎(真的是Google)关于如何增加默认文件输入缓冲区大小的引用, 64K.

从上面的链接,以显示8K缓冲区如何不缩放:

如果行通常每个大约有60个字符,则10,000行文件中包含大约610,000个字符.通过缓冲逐行读取文件只需要75次系统调用和75次等待磁盘,而不是10,001.

因此,对于每行60个字符(包括末尾的换行符)的50,000,000行文件,使用8K缓冲区,它将进行366211次系统调用以读取2.8GiB文件.顺便说一句,您可以通过在任务管理器进程列表中查看磁盘i/o读取增量(在Windows中至少,*nix中显示同样的东西,我确定)作为您的Perl程序来确认此行为在文本文件中读取需要10分钟:)

有人问起增加了对perlmonks Perl的输入缓冲区大小的问题,有人说在这里,你可以增加"$ /"的尺寸,从而增加缓冲区的大小,但是从的perldoc:

将$ /设置为对整数的引用,包含整数的标量或可转换为整数的标量将尝试读取记录而不是行,最大记录大小为引用的整数.

所以我假设这实际上没有增加Perl在使用典型时从磁盘读取的缓冲区大小:

while(<>) {
    #do something with $_ here
    ...
}
Run Code Online (Sandbox Code Playgroud)

"逐行"成语.

现在它可能是一个不同的"一次读取一条记录,然后将其解析为行",上述代码的版本通常会更快,并绕过标准习惯用语的基础问题而无法更改默认缓冲区大小(如果确实不可能),因为您可以将"记录大小"设置为您想要的任何内容,然后将每条记录解析为单独的行,并希望 Perl做正确的事情并最终为每条记录执行一次系统调用,但它增加了复杂性,而我真正想做的就是通过将上面示例中使用的缓冲区增加到相当大的大小(例如64K),甚至将缓冲区大小调整为使用测试进行长读取的最佳大小来获得轻松的性能提升我的系统上的脚本,无需额外的麻烦.

对于增加缓冲区大小的直接支持,Java中的情况要好得多.

在Java中,我相信java.io.BufferedReader使用的当前默认缓冲区大小也是8192字节,尽管JDK文档中的最新引用是模棱两可的,例如,1.5文档仅说:

可以指定缓冲区大小,或者可以接受默认大小.对于大多数用途,默认值足够大.

幸运的是,您不必信任JDK开发人员为您的应用程序做出正确的决定,并且可以设置您自己的缓冲区大小(在此示例中为64K):

import java.io.BufferedReader;
[...]
reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"), 65536);
[...]
while (true) {
                String line = reader.readLine();
                if (line == null) {
                    break;
                }
                /* do something with the line here */
                foo(line);
}
Run Code Online (Sandbox Code Playgroud)

即使使用巨大的缓冲区和现代硬件,你也可以挤出一次解析一行的性能,而且我确信有很多方法可以通过阅读大文件来读取文件中的每一个性能多行记录并将每个记录分解为令牌,然后每个记录执行一次这些令牌,但是它们增加了复杂性和边缘情况(尽管如果在纯Java中有一个优雅的解决方案(仅使用JDK 1.5中提供的功能)那将是很酷的了解).增加Perl中的缓冲区大小至少可以解决Perl 80%的性能问题,同时保持直接的性能.

我的问题是:

有没有办法在Perl中为上述典型的"逐行"习惯调整缓冲区大小,类似于Java示例中缓冲区大小的增加?

java perl performance file-io

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

在C#中不能将指针数组放在不安全的结构中的根本原因是什么?

如果可以将一个指向数组的指针放在C#中的不安全结构中的子结构中,就像在C中一样,构建复杂的数据结构而不会产生每个节点有一个对象的开销,这样会更容易,而且时间更少,以及语法更清晰,更易读.

是否有一个深层的架构原因,为什么不安全的结构中的固定数组只允许由"值类型"而不是指针组成?

我假设只有在结构中明确命名指针必须是故意削弱语言的决定,但我找不到任何关于为什么会这样的文档,或者不允许指针数组在结构中的原因,因为我会假设垃圾收藏家不应该关心被标记为不安全的结构.

数字火星'D优雅地处理结构和指针,我发现我无法快速开发简洁的数据结构; 通过在C#中引用抽象,很多功能似乎已从语言中删除,即使指针至少仍然存在于营销意义上.

也许我错误地期望语言随着时间的推移有效地表示复杂的数据结构.

c# struct pointers unsafe d

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

log4j javadoc jar隐藏在哪里?

它不在apache-log4j-1.2.15.tar.gz中,可从Apache网站和镜像中获得,Google也不会返回任何内容.Apache Commons Lang在tar.gz文件中有一个javadoc jar用于发布,但遗憾的是没有运气在log4j tarball中找到相同的内容.

log4j javadoc jar

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

看似不一致的"通过价值"规则.选择int []只是语法糖来使数组对象看起来像C/C++数组吗?

我在网上读到的东西错误地说int []Java中的标准等数组作为副本传递,而不是传递对数组的引用,类似于基本的数字类型,当我以为我在修改副本时最终覆盖了数组.我是否可以将其作为一种设计选择,以便在大约90年代中期为Java目标受众提供更简单的东西?(使对象在语法上看起来与C数组相同,或者Java中的数组实际上不是"Object"类型?)

也就是说,他们为什么不这样做:

Array array = new Array(<size>);
Run Code Online (Sandbox Code Playgroud)

另外,为什么他们不让所有内容(文字除外)通过引用来确保一致性?(int然后将s作为引用传递给int,而不是作为其值int,因此修改一个变量,该变量是该方法中方法的参数将修改原始变量的值,等等)

链接到Java中的pass-by-reference和pass-by-value的讨论

java language-features java-5

-2
推荐指数
2
解决办法
442
查看次数