小编Tob*_*bia的帖子

编译具有字符类和字边界的详细Java正则表达式时出错

为什么这种模式无法编译:

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

java regex verbose

45
推荐指数
5
解决办法
1764
查看次数

我可以为 - > b - >*编写更高阶的类型吗?

我理解这(->) 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(* - >*) - >*但我不确定,因为它超出了我的头:-)

haskell applicative higher-order-types

11
推荐指数
1
解决办法
112
查看次数

在AJAX中处理增量服务器响应(在JavaScript中)

我有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

即使是部分回应也会有所帮助.

javascript ajax xmlhttprequest

7
推荐指数
1
解决办法
3888
查看次数

如何在惯性滚动期间同步两个元素的滚动偏移

我需要保持一个元素的滚动偏移量与另一个元素(实际上是窗口)保持同步,并且我在移动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,setIntervalrequestAnimationFrame,但是在惯性滚动阶段它们都没有发射.似乎所有Javascript都在此阶段停止.

问题:

  • 在惯性滚动阶段是否有触发或滚动事件?
  • 没有办法在该阶段运行Javascript回调?
  • 有没有办法使用CSS或JS以外的其他技术同步两个元素(X或Y,而不是两者)的滚动偏移?

scroll mobile-safari ipad touchmove

7
推荐指数
1
解决办法
3439
查看次数

APL中的条件函数

在任何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程序员吗?:-)

functional-programming apl conditional-operator

7
推荐指数
4
解决办法
1591
查看次数

在通道上阻塞会发送错误的同步范例以及原因

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)

此代码(具有semServe从上述不变)使用以相反的方式被缓冲的信道.频道开始为空.在进入时handle,如果已经有MaxOutstandinggoroutines正在执行该过程,则发送将被阻止.只要其中一个完成其处理并从通道"释放"一个槽,通过接收一个int,我们的发送将被解除阻塞,goroutine将开始自己的处理. …

synchronization channel go goroutine

7
推荐指数
1
解决办法
573
查看次数

为什么Grails剥夺了我的异常?

如果你把它放在一个控制器动作中:

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源代码中的位置.

error-handling grails groovy exception

7
推荐指数
1
解决办法
269
查看次数

Kotlin 文件的文档放在哪里(不是包,不是模块,不是类)

我应该在哪里对 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 注释/块注释/行注释吗?

有没有既定的约定?

comments kotlin kdoc

7
推荐指数
1
解决办法
236
查看次数

选择未包含在其他类型元素中的后代元素

在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()以及如可用.

xslt xpath xslt-1.0

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

如何在 ON CONFLICT 子句中消除 plpgsql 变量名称的歧义?

鉴于此表:

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)

sql postgresql upsert plpgsql name-conflict

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