小编Dmi*_*ank的帖子

Vim:解决特定缓冲区中键映射的歧义,以避免超时

我使用插件" 自助 ",并有"本地到缓冲区映射" d"来删除光标下的缓冲区.

我也使用plugun Surround,并且有全局映射" ds"表示" 删除环绕声 ".

所以,当我d在自助餐窗口按" "时,Vim会在执行映射之前等待一秒钟d." 我知道&timeoutlen,但我不想改变它.因此,我想d在Buffet的窗口中解决" " 关键映射的模糊性,以避免超时以d获得缓冲区.

要解决这个问题,我想在Buffet窗口中取消所有以" d" 开头的映射,但除了Buffet自己的映射之外.我怎样才能做到这一点?

PS我已阅读maparg()mapcheck(),但他们似乎没有什么,我需要,很遗憾.

vim map

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

Java:System.out.println()应该写入控制台,但它不会

我正在尝试编写Java控制台应用程序,代码很简单:

public class ConsoleTest {
    public static void main(String[] args) {
        System.out.println("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我从Eclipse运行这个应用程序,那么我test在Eclipse的"控制台"中看到" ",但是如果我将我的应用程序导出为" Runnable JAR文件 "并从Windows XP运行它cmd.exe,则没有任何内容回显到控制台.

在安全方面,我试图检查System.console(),它返回null.

有什么不对?

java console

8
推荐指数
2
解决办法
4万
查看次数

MVC:为什么我们需要"控制器",或者何时应该使用这种模式?

我已经阅读了很多关于MVC的出版物,但我仍然无法清楚地理解为什么我们需要"控制器".

我经常在客户端 - 服务器模型中编写应用程序

服务器包含所有的业务逻辑,它对gui一无所知.它完成了主要工作,并且尽可能便携.

client是一个GUI,它绑定到服务器,与用户交互,从用户向服务器发送命令.

我喜欢这种架构,我无法弄清楚为什么人们真的需要在客户端服务器之间再添一个媒体,这似乎是控制器

UPD:简单示例:假设我们需要编写一些数据记录器.数据来自COM端口,它由某些协议编码.需要在简单的日志窗口中显示收到的消息.

我该怎么做:

服务器包含以下项目:

  • Data_receiver:其实从COM端口接收到的原始数据,但它的接口,所以我们能够做出一些从其他来源接收数据,另一个类;
  • Data_decoder:获取原始数据并返回生成的解码消息,它也是接口,因此我们可以轻松地更改编码协议;
  • Data_core:在使用的情况下Data_receiverData_decoder,发射信号到客户端.

客户端包含以下项目:

  • Appl核心:创建Data_receiver(连接到COM端口的那个)Data_decoderData_core(它接受引用Data_receiverData_decoder实例)的实例,还创建GUI简单的日志窗口(参考Data_core);
  • GUI简单日志窗口:绑定到Data_core,即侦听由其发出的信号,并显示接收的数据.

当我理解我所读到的关于MVC的内容时,GUI实际上不应该从中接收消息Data_core,因为控制器应该这样做,然后将数据传递给GUI.但是如果GUI直接从模型中获取这些数据会发生什么不好的事情?

model-view-controller client-server application-design

8
推荐指数
1
解决办法
2248
查看次数

removeChild():如何删除缩进?

让我们考虑以下XML文档:

<items>
   <item>item1</item>
   <item>item2</item>
</items>
Run Code Online (Sandbox Code Playgroud)

现在,让我们删除所有项目并添加一些新项目.码:

  //-- assume we have Element instance of <items> element: items_parent
  //   and the Document instance: doc

  //-- remove all the items
  NodeList items = items_parent.getElementsByTagName("item");

  for (int i = 0; i < items.getLength(); i++){
     Element curElement = (Element)items.item(i);
     items_parent.removeChild(curElement);
  }

  //-- add a new one
  Element new_item = doc.createElement("item");
  new_item.setTextContent("item3");
  items_parent.appendChild(new_item);
Run Code Online (Sandbox Code Playgroud)

文件的新内容:

<items>


   <item>item3</item>
</items>
Run Code Online (Sandbox Code Playgroud)

这些恼人的空白线出现因为removeChild()除去了小孩,但是留下了被移除的小孩的缩进,并且线断裂.并且此indent_and_like_break被视为文本内容,该内容保留在文档中.

相关问题中,我发布了变通方法:

items_parent.setTextContent("");
Run Code Online (Sandbox Code Playgroud)

它删除了这些空白行.但这是一些黑客攻击,它消除了影响,而不是原因.

所以,问题在于如何消除原因:如何以换行意图移除孩子?

java xml dom removechild

8
推荐指数
1
解决办法
6220
查看次数

Java:使用剪贴板在同一应用程序的不同实例之间复制粘贴java对象

我试图在同一个应用程序的不同实例之间实现对象的复制粘贴.目前它仅适用于一个应用程序(我的意思是,复制并粘贴在相同的应用程序实例中),但在不同的实例之间不起作用.

复制代码:

// MyObject is a class of objects I want to copy/paste;
// MyObjectSelection is a class that impements Transferable and ClipboardOwner interfaces

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
MyObject data = new MyObject(selectedItems);
MyObjectSelection dataSelection = new MyObjectSelection(data);
clipboard.setContents(dataSelection, this);
Run Code Online (Sandbox Code Playgroud)

之后,我可以检查剪贴板的内容,如下所示:

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable clipboardContent = clipboard.getContents(this);

DataFlavor[] flavors = clipboardContent.getTransferDataFlavors();
System.out.println("flavors.length=" + flavors.length);
for (int i = 0; i < flavors.length; i++){
   System.out.println("flavor=" + flavors[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果我从我复制对象的同一个应用程序实例中执行此操作,它可以工作:flavors.length1,mimetype是application/x-java-serialized-object,并且,它确实有效.

但是如果我打开应用程序,执行复制,然后再次打开相同的应用程序(第一个没有关闭,即两个实例同时运行),并尝试从那里检查剪贴板内容,然后flavors.length0 …

java clipboard copy-paste awt

8
推荐指数
1
解决办法
7489
查看次数

Java:比较HashMap <String,Object>如果value可能是Object []

我有以下带有属性键和值的HashMap:

private HashMap<String, Object> prop_values;
Run Code Online (Sandbox Code Playgroud)

我需要检查它的一个实例是否等于另一个实例.在过去,我只是这样做:

if (prop_values_1.equals(prop_values_2)){
   //  do something
}
Run Code Online (Sandbox Code Playgroud)

这一直有效,直到我得到Object[]一个价值.所以,我以前表达总是返回false这样HashMap任何Object[]价值.

所以,我必须实现这个方法:

private boolean isPropValuesEquals(HashMap<String, Object> pv1, HashMap<String, Object> pv2){
   boolean isEquals = true;

   if (pv1 == null || pv2 == null){
      return false;
   }

   if (!pv1.keySet().equals(pv2.keySet())){
      return false;
   }

   for (String key : pv1.keySet()){

      Object cur_pv1 = pv1.get(key);
      Object cur_pv2 = pv2.get(key);

      if (cur_pv1 instanceof Object[]){
         if (cur_pv2 instanceof Object[]){
            isEquals = Arrays.equals((Object[])cur_pv1, (Object[])cur_pv2);
         } else {
            return false; …
Run Code Online (Sandbox Code Playgroud)

java arrays equals

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

Vim:缩进标签,与空格对齐

我已经阅读了几个问题和答案:

但它们都没有为我提供解决方案.

我真的想要应用" 缩进标签,与空格对齐 "的原则,但是当谈到自动缩进时,我没有教Vim如何做到这一点.

考虑代码,假设tabstops == 3,shiftwidth == 3

(>--表示标签,.(点)表示空格):

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}
Run Code Online (Sandbox Code Playgroud)

因此,它尽可能地缩进标签,然后用空格填充其余部分.但实际上这是一种非常糟糕的方法:当有人将使用不同的标签大小读取此代码时,代码将被搞砸.这里的标签大小等于8个字符的样子:

{
>-------long a = 1,
>------->-------..b = 2,
>------->-------..c = 3;
}
Run Code Online (Sandbox Code Playgroud)

太可怕了.问题是Vim没有区分缩进和对齐.

为了使其与标签大小无关,它应该以这种方式缩进代码:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}
Run Code Online (Sandbox Code Playgroud)

然后,无论选项卡大小如何,此代码看起来都会很好.例如,8个字符:

{
>-------long a = 1,
>-------.....b = 2,
>-------.....c = 3;
}
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

vim indentation alignment auto-indent

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

AngularJS:service的布尔方法是否应该返回为true/false或者被解析/拒绝的promise?

承诺使用的模式仍然让我困惑.

例如,在Angular应用程序中,我有一个usersService带方法的服务emailExists(email).显然,它会向服务器执行请求,以检查给定的电子邮件是否已存在.

它感觉自然对我来说,使该方法emailExists(email)返回的承诺,在正常操作解析为truefalse.如果我们只有一些意外错误(例如,服务器返回500: internal server error,则应拒绝承诺,但在正常操作中,它将被解析为相应的布尔值.

Hovewer,当我开始实现我的异步验证器指令(by $asyncValidators)时,我发现它想要解析/拒绝承诺.所以,到现在为止,我最终得到了这个相当丑陋的代码:

'use strict';

(function(){

   angular.module('users')
   .directive('emailExistsValidator', emailExistsValidator);


   emailExistsValidator.$inject = [ '$q', 'usersService' ];
   function emailExistsValidator($q, usersService){
      return {
         require: 'ngModel',
         link : function(scope, element, attrs, ngModel) {

            ngModel.$asyncValidators.emailExists = function(modelValue, viewValue){
               return usersService.emailExists(viewValue)
               .then(
                  function(email_exists) {
                     // instead of just returning !email_exists,
                     // we have to perform conversion from true/false
                     // to resolved/rejected promise
                     if (!email_exists){
                        //-- email does not …
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs angular-promise

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

React Native + Redux应用程序中ListView的性能

我有一个ListView,显然,它呈现了一些项目的列表.之前,我用没有终极版阵营本土,所以当我的底层数据的变化,我打电话setState(),修改数据,那么dataSource = dataSource.cloneWithRows(itemsData);,这是很高性能:如果只有它的数据发生变化的每一行重新呈现(即,如果我rowHasChanged()回来true了那一排).

但是,整体应用程序设计非常特别且维护得不够好,所以我决定尝试使用Redux.

现在,我的场景是"纯粹的",也就是说,它完全取决于传递的道具,这些道具是通过生成的mapStateToProps().但问题是,每当任何项目发生变化时,ListView都会重新创建整个元素,因此,所有项目都会被重新渲染(rowHasChanged()甚至不会调用我的项目).这是非常令人沮丧的,因为摆脱这种行为的唯一方法是使场景再次非纯:添加状态,并在需要时以某种方式更新它.

或者,还有什么其他选择?

listview react-native redux

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

用微小的Lemon语法解决解析冲突

我正在尝试学习Lemon解析器生成器的基础知识,但我很快就陷入了困境.

这是一个很小的语法:

%right PLUS_PLUS.
%left DOT.

program ::= expr.

member_expr ::= expr DOT IDENTIFIER.

lhs_expr ::= member_expr.

expr ::= lhs_expr.
expr ::= PLUS_PLUS lhs_expr.
Run Code Online (Sandbox Code Playgroud)

它导致1个解析冲突:

State 3:
      (3) expr ::= lhs_expr *
      (4) expr ::= PLUS_PLUS lhs_expr *

                           DOT reduce       3      expr ::= lhs_expr
                           DOT reduce       4       ** Parsing conflict **
                     {default} reduce       4      expr ::= PLUS_PLUS lhs_expr
Run Code Online (Sandbox Code Playgroud)

然而,如果我重写最后一条规则如下:

expr ::= PLUS_PLUS expr DOT IDENTIFIER.
Run Code Online (Sandbox Code Playgroud)

然后它不会导致冲突.但我不认为这是正确的方法.

如果有人能解释什么是正确的方式,为什么,我会很感激.

parser-generator shift-reduce-conflict shift-reduce lemon

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