为什么这种模式无法编译:
Pattern.compile("(?x)[ ]\\b");
Run Code Online (Sandbox Code Playgroud)
错误
ERROR java.util.regex.PatternSyntaxException:
Illegal/unsupported escape sequence near index 8
(?x)[ ]\b
^
at java_util_regex_Pattern$compile.call (Unknown Source)
Run Code Online (Sandbox Code Playgroud)
虽然以下相同的工作?
Pattern.compile("(?x)\\ \\b");
Pattern.compile("[ ]\\b");
Pattern.compile(" \\b");
Run Code Online (Sandbox Code Playgroud)
这是Java正则表达式编译器中的错误,还是我遗漏了什么?我喜欢使用[ ]详细的正则表达式而不是反斜杠反斜杠空间,因为它可以节省一些视觉噪音.但显然他们不一样!
PS:这个问题与反斜杠无关.它是关于使用包含单个空格[ ]而不是使用反斜杠的字符类在冗长的正则表达式中转义空格.
不知何故,verbose正则表达式(?x)和包含单个空格的字符类的组合会抛弃[ ]编译器并使其无法识别单词边界转义\b
使用Java测试高达1.8.0_151
我理解这(->) a是一种更高阶的类型* -> *,当应用于类型参数时b会给出类型a -> b
我可以写一种类型* -> *,当应用时c会给出a -> b -> c?
如果没有,为什么不呢?也许使用一些语言扩展和forall?
这将让我编写Functor和Applicative(以及其他类)的实例,其中的函数结构是" a -> b ->",如:
(<*>) :: Applicative t => t (c -> d) -> t c -> t d
(<*>) :: (a -> b -> c -> d) -> (a -> b -> c) -> a -> b -> d
Run Code Online (Sandbox Code Playgroud)
这对于二进制(curried)函数的组合器很有用.
NB.也许这是相关类型的Functors和Applicative(* - >*) - >*但我不确定,因为它超出了我的头:-)
我有AJAX应用程序,它根据服务器响应更新页面.AJAX服务器响应所基于的命令需要很长时间才能生成完整响应,但它会在计算后立即发送部分信息.该部分响应/部分信息以"突发"发送,并且每个突发的时间和大小是不可预测的.将命令输出流式传输到Web浏览器(到AJAX请求)的CGI脚本(在Perl中)已启用autoflush.
服务器响应基于外部命令的输出.虽然'time cmd>/dev/null"平均给出大约10.0秒,'time cmd | head>/dev/null'给出的时间少于0.1秒(例如数据).所有数据都是单次调用此外部命令的结果.
情况如下所示(ASCII-art图如下):
client | | server
--------- ---------
request -\
\
\
\
\->
/- response
/ .
/ .
/ /- .
<-/ / .
/ .
/ /- [end]
<-/ /
/
/
<-/
Run Code Online (Sandbox Code Playgroud)
我对这个问题有几个疑问.
注意:服务器端是在Perl中作为CGI脚本完成的,我更愿意看到(也)解决方案,而不使用像jQuery这样的JavaScript库/框架.
AJAX应用程序服务器端使用的命令输出是基于行的.每组行以一种定义的行开头,以其他类型的行结束,由独立和不可更改的数据组成.我应该只是将命令的响应作为'text/plain'传输并在客户端进行JavaScript处理,还是应该在服务器上预处理数据,并使用'application/json'mimetype将整个数据块作为JSON发送?
可能会发生服务器一次发送的大块数据很快就会被另一块数据跟踪.如何处理onreadystatechange上次调用未完成时调用处理程序的情况?我应该使用全局变量作为信号量,还是将状态变量作为处理程序参数传递(好吧,使用xhr.onreadystatechange = function() { handleRequest(xhr, state) })?
我应该使用'text/plain'或'application/json',或者'multipart/x0mixed-replace'吗?注意:此应用程序应该在(alomst)任何浏览器中工作.
如何处理仅在收到完整响应后调用onReadyStateChange的Web浏览器(JavaScript引擎)(所以我不会xhr.readyState == 3多次看到部分响应)?好吧,除了使用一些JavaScript框架.
如何处理不完整的回答(在这种情况下意味着不完整的行).
我应该发送响应结束标记,还是依靠计数器检查我们是否收到了所有数据,还是可以依靠检测xhr.readyState == 4?
即使是部分回应也会有所帮助.
我需要保持一个元素的滚动偏移量与另一个元素(实际上是窗口)保持同步,并且我在移动Safari(iPad)上滚动的惯性"滚动"阶段遇到了麻烦.
我有几个div,position:fixed; overflow:hidden我需要保持他们的滚动偏移与窗口的一个同步(意味着整个身体滚动.)通常我会像这样(jQuery)编码:
var $win = $(window),
$div1 = $(...)
$win.scroll(function() {
$div1.scrollTop($win.scrollTop())
})
Run Code Online (Sandbox Code Playgroud)
但是在iPad上测试界面时,我注意到在触摸阶段,当你用手指拖动虚拟页面时,也没有在惯性阶段,当你放开并且页面减速到停下来
我通过注册touchmove事件的处理程序以及事件处理程序来解决拖动阶段scroll.
但我找不到解决惯性阶段问题的方法.div保持静止(并且慢慢地与页面的其余部分不同步),直到惯性运动达到完全停止,此时滚动事件最终被触发并且它跳到位置.
尝试在iPad上滚动它以查看"惯性晃动"问题.不幸的是,我无法让它在jsFiddle上工作,因为iPad在iframe滚动时出现奇怪的行为.
如果我可以在该阶段进行轮询,我可以保持两个元素之间的同步.我试过了setTimeout,setInterval和requestAnimationFrame,但是在惯性滚动阶段它们都没有发射.似乎所有Javascript都在此阶段停止.
问题:
在任何APL方言中,条件函数是否有符号或众所周知的习语?
我确定我错过了一些东西,因为它是一种基本的语言元素.在其他语言中,它被称为条件运算符,但我会在这里避免使用该术语,因为APL运算符完全是另一回事.
例如C和朋友有x ? T : F
LISP有(if x T F)
Python T if x else F
等等.
我知道现代APL有:If和朋友,但它们是控制程序流的命令性语句:它们不返回值,不能在表达式中使用,当然也不能应用于布尔数组.他们完全有不同的目的,这对我来说很好.
我可以用来做功能选择的唯一合适的表达方式是(F T)[?IO+x],虽然它完成了工作,即使在数组上也不会特别简写或对我来说是可读的:
('no' 'yes')[?IO+(?5)?.>(?5)]
no no no no no
yes no no no no
yes yes no no no
yes yes yes no no
yes yes yes yes no
Run Code Online (Sandbox Code Playgroud)
我试图用小队提出类似的表达方式?,但在布尔阵列上惨遭失败.即使我可以,它仍然必须嵌入?IO或硬编码1,就可读性而言更糟糕.
在我继续定义自己if并在我将要编写的每个程序上使用它之前,有什么经典吗?我错过了一个明显的功能或操作员吗?
(SO上有APL程序员吗?:-)
Effective Go给出了关于如何使用通道模拟信号量的示例:
var sem = make(chan int, MaxOutstanding)
func handle(r *Request) {
<-sem
process(r)
sem <- 1
}
func init() {
for i := 0; i < MaxOutstanding; i++ {
sem <- 1
}
}
func Serve(queue chan *Request) {
for {
req := <-queue
go handle(req)
}
}
Run Code Online (Sandbox Code Playgroud)
它还说:由于数据同步发生在来自通道的接收上(即发送"发生在接收之前;请参阅Go Memory模型),信号量的获取必须在通道接收上,而不是发送.
现在,我想我理解Go Memory Model和"之前发生过"的定义.但我没有看到阻止频道发送的问题:
func handle(r *Request) {
sem <- 1
process(r)
<-sem
}
func init() {}
Run Code Online (Sandbox Code Playgroud)
此代码(具有sem和Serve从上述不变)使用以相反的方式被缓冲的信道.频道开始为空.在进入时handle,如果已经有MaxOutstandinggoroutines正在执行该过程,则发送将被阻止.只要其中一个完成其处理并从通道"释放"一个槽,通过接收一个int,我们的发送将被解除阻塞,goroutine将开始自己的处理. …
如果你把它放在一个控制器动作中:
def inner = new RuntimeException("inner")
def middle = new Exception("middle", inner)
def outer = new IllegalArgumentException("outer", middle)
throw outer
Run Code Online (Sandbox Code Playgroud)
Grails的错误调试页面(最重要的是,日志)只显示内部异常类及其消息:
错误500:内部服务器错误
URI:/...
类: java.lang.RuntimeException
消息:内部
这是有问题的,因为当您选择使用更具描述性的消息来包装异常时,大多数情况下,外部消息在调试问题时更为重要.
实际上,在原因链中包含所有异常,包括类名,消息和堆栈跟踪,就像常规Java一样.
我已经尝试在错误页面中自己打印异常,但是在调用错误视图之前发生了剥离.
是否有可以改变此行为的配置参数?
编辑:我发布了一个错误,并启动了一个邮件列表线程,但到目前为止,我还没有找到一个解决方法,甚至还没有发现这种剥离的Grails源代码中的位置.
我应该在哪里对 Kotlin 源文件发表评论?
类和其他对象具有 KDoc:
/**
* Summary
*
* Rest of documentation goes here.
*/
class A {
...
}
Run Code Online (Sandbox Code Playgroud)
但是我应该把这样的东西放在哪里?
// This file contains constants shared between frontend and backend.
// Make sure not to use any JVM- or JS-specific import.
// ...
Run Code Online (Sandbox Code Playgroud)
package声明之前?之后呢?我应该使用 KDoc 注释/块注释/行注释吗?
有没有既定的约定?
在XPath 1.0中,如何选择当前(上下文)节点A的所有后代节点C,它们不包含在类型B的中间节点中?
例如,查找<a>当前元素中包含的不在a内的所有链接<p>.但是如果当前元素本身在一个内部<p>,则无关紧要.
<p> <—— this is irrelevant, because it's outside the current element
...
<div> <—— current element (context node)
...
<a></a> <—— the xpath should select this node
...
<p>
...
<a></a> <—— but not this, because it's inside a p, which is inside context
...
<p>
...
</div>
...
</p>
Run Code Online (Sandbox Code Playgroud)
将...在本例中可能是介入的节点的几个深度.
我在写XSLT 1.0,因此额外的功能generate-id(),current()以及如可用.
鉴于此表:
create table test (
name text primary key
);
Run Code Online (Sandbox Code Playgroud)
我需要编写一个变量名与主键名冲突的 plpgsql 函数,我必须在on conflict子句中使用它:
create or replace function func(
name text -- this variable name...
) returns void language plpgsql as
$$
begin
insert into test (name) values (name)
on conflict (name) do update -- ...conflicts with this line
set name = func.name;
end;
$$;
Run Code Online (Sandbox Code Playgroud)
这会编译,但会抛出一个不明确的列引用:
select * from func('one');
ERROR: column reference "name" is ambiguous
LINE 2: on conflict (name) do update
^
DETAIL: It could refer …Run Code Online (Sandbox Code Playgroud)