小编Mar*_*tus的帖子

如何有选择地不使用.bashrc中定义的别名

我的.bashrc中定义了一些别名.例如:

    alias ls='ls -la --color'
Run Code Online (Sandbox Code Playgroud)

问题是有时我想有选择地不使用扩展.例如,我可以这样做:

ls -a
Run Code Online (Sandbox Code Playgroud)

我发现的一个解决方案是做一个:

`which ls` -a
Run Code Online (Sandbox Code Playgroud)

当我想使用别名.但我想知道是否还有其他成熟的习惯用法.

bash alias

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

Python any(iterable)和all(iterable)没有短路和副作用

我有以下代码:

def evAnd(v, *predicates):
    satisfied=True
    for f in predicates:
        if not f(v):
            satisfied=False
            # log: f,v->False in a map and other side effects
        else:
            # log: f,v->True in a map and other side effects
    return satisfied


def evOr(v, *predicates):
    satisfied=False
    for f in predicates:
        if f(v):
            satisfied=True
            # log: f,v->True in a map and other side effects
        else:
            # log: f,v->False in a map and other side effects
    return satisfied
Run Code Online (Sandbox Code Playgroud)

什么是Pythonic在单一功能中统一上述内容的方法?(因为存在相当大的副作用代码,其中放置了日志消息)注意副作用的存在以及评估所有谓词的结果而不需要短路任何所有谓词的需要

基于公认答案的解决方案

所以,这就是我最后根据接受的答案所做的事情:

def …
Run Code Online (Sandbox Code Playgroud)

python

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

Clojure函数在集合中产生"内部笛卡尔积"

给出清单:

'( [:a [:a1 :a2]]  [:b [:b1 :b2 :b3]] )
Run Code Online (Sandbox Code Playgroud)

如何生成列表:

'( [:a :a1] [:a :a1] [:b :b1] [:b :b2] [:b :b3] )
Run Code Online (Sandbox Code Playgroud)

(这是一种元素扩展笛卡尔积与1级扁平化相结合)

我能想到的最好的是:

(apply concat (map #(for [v (second %)] (vector (first %) v)) TheList))
Run Code Online (Sandbox Code Playgroud)

这看起来过于复杂; 实现它的更惯用的方法是什么?

此外,当尝试在列表中执行这种元素扩展笛卡尔积 - 产品时,应该考虑哪些函数系列?(我完全不知道如何描述它).

clojure

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

PipedInputStream/PipedOutputStream紧密"循环"::为什么"java.lang.OutOfMemoryError:Java堆空间"?

我正在尝试PipedInputStream并且PipedOutputStream无法理解为什么以下代码会导致Java堆耗尽问题.String创建的所有临时对象都应该是gc -ed.为什么我会得到一个OutOfMemoryError

我试图写String每1000 万个字符长的1000个对象.即使在调用时,下面的代码也会失败一半-Xmx2g.更多的痕迹:

written string #453
read string #453
written string #454
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

......揭示了PipedInputStream只有一个String对象"落后"了PipedOutputStream.我不明白为什么垃圾收集无法回收所有必要的堆内存.

import java.io.*;
import java.util.*;


class Worker implements Runnable {

    private ObjectOutputStream oos;
    private PipedInputStream   pis;

    public Worker() throws IOException {
        this.pis = new PipedInputStream();
        this.oos = new ObjectOutputStream(new PipedOutputStream( pis ));
    }

    @Override
    public void run() {
        try { …
Run Code Online (Sandbox Code Playgroud)

java heap garbage-collection

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

在let表单中定义递归函数

在Clojure中是否可以在let表单中定义递归函数或者应该letfn使用它?例如,我可以使用以下方法let吗?

(defn blowStackExample []
  (letfn [(blowStack []
            (blowStack))]
    (blowStackExample))) 
Run Code Online (Sandbox Code Playgroud)

clojure

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

类型不匹配:使用条件运算符时无法从Object转换为K.

我有以下代码,

class Foo<K> {

    public <T> T createK() {
        return null;
    }

    public void foo() throws ClassNotFoundException {
        K k = (1==1)?null:createK();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它没有编译.它使用条件运算符导致以下编译错误(Oracle Java 7):

类型不匹配:无法从Object转换为K.

当我重写foo()方法如下,

public void foo() throws ClassNotFoundException {
    K k = null;
    if (1==1)
        k = null;
    else
        k = createK();
}
Run Code Online (Sandbox Code Playgroud)

然后编译好.这是怎么造成的,我该如何解决?

java generics conditional-operator

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

为什么我不能在此查询中使用WITH(公用表表达式)?

这只是一个SSCCE:

CREATE TABLE test(i INTEGER NOT NULL);

WITH max_i AS (SELECT MAX(i) FROM test)
SELECT * FROM test WHERE max_i - i < 2 AND max_i!=i
Run Code Online (Sandbox Code Playgroud)

PostgreSQL抱怨:

ERROR: column "max_i" does not exist
Run Code Online (Sandbox Code Playgroud)

我想这是因为max_i只有一个值,而不是一个行集,但我怎么弄,每当它们被用来在我经历复杂的查询,而不必重复子查询获得我的查询值仅一次定义?

sql postgresql common-table-expression

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

将“类”“实例”传递给 ReactJS 组件来代替“props”文字

似乎当涉及props中提供的对象时React.createElement,该createElement方法仅检查该对象的可枚举属性(或者至少看起来如此)。

因此,如果我使用 ECMAScript-6 类对 ReactJS 状态进行建模,并提供改变该状态的方法(封装,对吧?),我不能只在调用中将该状态传递给 ReactJS 组件,因为 ReactJS 不会createElement看到方法。所以我必须做这样的事情:

const MyApp = React.createClass({
      propTypes: {
          methodA: React.PropTypes.func.isRequired,
          methodB: React.PropTypes.func.isRequired
      },
...});

class MyAppState {
...
}

let appState = new MyAppState();
ReactDOM.render(
    React.createElement(MyApp, Object.assign(
         {
          methodA: s.methodA.bind(s),
          methodB: s.methodB.bind(s)
         }, appState))
    , document.getElementById('somePlace')
)
Run Code Online (Sandbox Code Playgroud)

...这有点违背了目的。我不太喜欢 Javascript“类”,但是有没有办法以这种方式使用类来提供propsReactJS 元素?类“字段”是可枚举的,因此不会造成问题,这是我无法通过这种方式传递的方法/操作。

javascript ecmascript-6 reactjs

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

未捕获(承诺)错误

这显然是一个SSCCE。我有以下内容(jsFiddle 在此处):

<html>
  <body>
    <input id='file-dlg' type='file'/>
    <br/>
    <button id='submit' type='button'>submit</button>
    <script>
     document.getElementById('file-dlg').addEventListener('change', storeAPromise);
     var p; 
     function storeAPromise() {
       p = new Promise(function executor(resolve, reject) {
         try {
           throw new Error('snafu');
         } catch(e) {
           reject(e);
         }
       });
     };
     document.getElementById('submit').onclick = function() {
       p.then(function() {}, function reject(e) {
         console.error('some problem happenned', e);
       });
     };
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

当用户使用文件对话框选择文件时,我希望在控制台上根本不会打印任何内容,因为Error会捕获到该内容reject并调用promise的功能。相反,我希望只有在单击“提交”按钮时,错误才会出现在控制台上,并带有“发生了某些错误”的描述。

但是,这不是我观察到的。用户在对话框中选择一个文件后,就会在控制台上看到:

Uncaught (in promise) Error: snafu(…)
Run Code Online (Sandbox Code Playgroud)

当用户按下“提交”按钮时,我确实看到了预期的日志行“发生了某些问题”,但是当用户选择带有以下内容的文件时,我不明白为什么我还会看到较早的“未捕获(承诺)”日志行。文件对话框。考虑到我(无条件地)捕获了所有异常并简单地调用了reject函数,因此我也看不到为什么将错误描述为“未捕获” 。

javascript es6-promise

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

与类型变量不兼容的类型

任何人都可以告诉我为什么以下无法编译?

class A<K> {

    public <K> A() {
    }

    public static <K> A<K> create(Class<K> k) {
        return new A<K>();
    }
}


public class B<K, V> {

    A<K> ak;

    public <K, V> B(Class<K> klass, V v) {
         ak = A.create(klass);
    }
}
Run Code Online (Sandbox Code Playgroud)

它失败了:

[javac] /home/.../src/B.java:17: error: incompatible types
[javac]         ak = A.create(klass);
[javac]                      ^
[javac]   required: A<K#2>
[javac]   found:    A<K#1>
[javac]   where K#1,V,K#2 are type-variables:
[javac]     K#1 extends Object declared in constructor <K#1,V>B(Class<K#1>,V)
[javac]     V extends Object declared in constructor <K#1,V>B(Class<K#1>,V) …
Run Code Online (Sandbox Code Playgroud)

java generics

0
推荐指数
1
解决办法
836
查看次数

如何在文档的<body>中搜索

我有以下带有两个<a>元素的HTML :

<!doctype html>
<html>
    <head>
        <a href="http://www.google.com">www.google.com</a>
        <script>
            function onLoad() {
                var bodyLinks = document.body.getElementsByTagName("a");
                var msg = "There's "+bodyLinks.length
                        +" links in the body, of which the first one is: ["+bodyLinks[0].href+"].";
                console.log(msg);
            }
            window.onload = onLoad;
        </script>
    </head>
    <body>
        <br/>
        <a href="http://www.stackoverflow.com">www.stackoverflow.com</a>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

其中一个<a>元素在<head>元素中,另一个元素在元素中<body>.然而,在控制台上加载写入时上面的页面:

There's 2 links in the body, of which the first one is:  [http://www.google.com/].
Run Code Online (Sandbox Code Playgroud)

更重要的是令人费解的,不断变化的document.body.getElementsByTagName,以document.documentElement.getElementsByTagName产生完全相同的结果.我是否理解document.body当时是别名document.documentElement并且实际上并未指向<body>HTML 的元素?

html javascript

0
推荐指数
1
解决办法
37
查看次数