小编art*_*bot的帖子

如何查找网络接口名称

我有一个在各种不同的Ubuntu Linux机器上运行的bash脚本.它的工作是找出localhost的LAN IPv4地址.

该脚本正在使用

ip addr show eth0 | sed -n '/inet /{s/^.*inet \([0-9.]\+\).*$/\1/;p}'
Run Code Online (Sandbox Code Playgroud)

这很好,但有些机器出于某种原因使用eth1而不是eth0.我希望能够发现LAN iface名称,所以我可以在这里替换它而不是eth0.

当然,如果你能想出一个不同的oneliner做同样的事情,那一切都很好.

linux ip bash sed

6
推荐指数
3
解决办法
3万
查看次数

PHP抽象静态类方法的替代模型

好的,所以我在这里读了很多关于此的帖子,但我认为这是一个特定的新问题.

我希望我们这里很多人错误地称之为"抽象静态方法"的功能.那就是:我想要一个类,它坚持扩展它的类实现某些静态方法.

对于不允许抽象静态的讨论问题,似乎有两条道路,但两者似乎都不优雅.

问题

以下内容会生成错误:"PHP严格标准:静态函数A :: fn()不应该是抽象的".

<?php
abstract class A
{
     abstract static public function fn();
}

class B extends A
{
    static public function fn()
    {
         // does something on class vars etc.
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方案1:使用接口

<?php
interface iA {
    static function fn();
}


abstract class A implements iA 
{
} // obviously this would have other stuff in it in reality

class B extends A
{
    static public function fn()
    {
         // does …
Run Code Online (Sandbox Code Playgroud)

php oop abstract-class

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

如何在变量中为python函数构建参数

我有一个 Python (3) 函数

def f(a, b, c=1, d=2):
    pass
Run Code Online (Sandbox Code Playgroud)

我想在代码中建立一个参数列表。实际用例是基于一些命令行参数解析来执行此操作,但这是一个一般性问题(我对 python 相当陌生)例如

myargs = {}
myargs['positionalParams'] = ['foo', 'bar']
myargs['c']=2
myargs['d']=3
f(myargs)
Run Code Online (Sandbox Code Playgroud)

我知道我可以f(*somelist)将列表扩展为单独的参数,但是如何混合使用位置参数和可选参数呢?或者我做两次,一次用于位置,一次用于其他人的字典?

python python-3.x

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

如何从 Zsh 中的 terminfo 获取 Ctrl+Left 的控制字符

我用来terminfo找出终端中左(右,...)键的控制序列,以便我可以将其映射到我的有用的东西(向左移动),如下所示zshrc

typeset -A key
left=${terminfo[kcub1]}
bindkey "$left" backward-char
Run Code Online (Sandbox Code Playgroud)

(还有其他一些事情可以让它发挥作用,请参阅来源)。这很有帮助,因为我使用多个终端仿真器并且这些控制序列会发生变化。例如,我在 Ubuntu 上使用 Gnome 终端连接到 Debian 盒子,然后在其中ssh使用...tmux

但是我如何从 terminfo 找到 CTRL+LEFT(和 RIGHT...)的关键代码?我想将它们映射到单词左/右。

terminal zsh ncurses zshrc terminfo

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

GNU find:默认操作何时适用?

Debian 8的find命令的手册页说:

如果整个表达式不包含-prune或-print以外的任何操作,则对整个表达式为true的所有文件执行-print.

那么为什么这些产出不同:

$ mkdir -p test/foo test/bar && cd test && touch foo/bar bar/foo
$ # Test 1
$ find . -name foo -type d -prune -o -name foo
./foo
./bar/foo
$ # Test 2
$ find . -name foo -type d -prune -o -name foo -print
./bar/foo
Run Code Online (Sandbox Code Playgroud)

所以测试1:表达式是否包含"除-prune或-print之外的其他动作?" 好吧,除了修剪,是的,这句话是真的,没有行动.所以这些结果是预期的,因为对于选项./foo之前的表达式-o返回True,所以它被打印出来.

但测试2:表达式是否包含"除-prune或-print之外的其他操作?" 好吧,不包括修剪和印刷品,是的,该陈述再次成立,没有其他行动.所以我希望得到相同的结果.

但我没有得到./foo.为什么?

就好像手册页应该是:"如果整个表达式不包含-prune以外的任何动作 或打印,-print对整个表达式为真的所有文件执行."

linux find gnu-findutils

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

Vuejs + webpack:npm 运行构建缓慢

我正在学习 webpack 和 Vuejs。我已按照https://vuejs-templates.github.io/webpack/ 上的简单说明进行操作,效果很好。

但是,当我运行npm run build制作生产版本时,它需要 12 秒!我不明白为什么这个分钟的演示单页,没有功能应用程序,它的整体只有 115kB 需要这么长时间来构建。

我在很多地方都读过关于node_modules从 webpack 配置中排除的内容,但我在vue-cli的 webpack 模板中看不到这一点——它是否试图缩小、整理所有库代码或其他内容?

我意识到这是一个非常菜鸟的问题,所以请善待我!

webpack vuejs2

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

使用Vuejs进行逐步增强-解析现有的HTML

我想使用Vue(v2)来管理HTML页面的各个部分,但是这样做的方式是,如果用户没有javscript,他们仍然会得到一个漂亮的页面。

例如,服务器可能输出:

<div id="rootAppContainer">
  ...
  <article is="foo" >
     <h1>Something cool</h1>
     <p>Here's a great article.</p>
  </article>
  ...
</div>
Run Code Online (Sandbox Code Playgroud)

可以作为备用。但我希望Vue可以挂载文章并用更好的内容代替,例如

<article>
   <p v-show="showTeaser" >{{teaser}}</p>
   <div v-show="!showTeaser" >
      <h1>{{title}}</h1>
      <p>Here you go:</p>
      <p>{{body}}</p>
   </div>
</article>
Run Code Online (Sandbox Code Playgroud)

为此,我希望能够解析要安装的元素的pre-vue内容,以提取视图模型data,然后将其模板格式化。

我以为可以使用生命周期挂钩或组件的数据方法来执行此操作,但是我找不到任何方法来获取对即将安装的节点的引用。直到为时已晚(mounted即已被替换)。

https://codepen.io/artfulrobot/pen/GOGBWQ?editors=1010

vue.js vuejs2

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

是否有相当于使用 rlwrap 调用脚本的 python (3) 本机?

我在用着input()在 Python (3) CLI 脚本中向用户询问命令。

\n\n

我希望他们能够按\xe2\x86\x91重用旧命令。就此而言,我希望他们也能够进行其他基本的线条编辑。

\n\n

我可以通过运行来获得这些功能rlwrap myscript.py,但我不想运行包装脚本。(是的,我可以设置一个别名,但如果可能的话,我想将其封装在脚本中)

\n\n

是否有一个库可以启用此功能(例如提供历史/编辑感知版本input())或者我需要从头开始?

\n

python python-3.x rlwrap

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

每当我在PHP中输入&gt;时如何停止vim哔哔声

这是一个PHP代码段

 $foo = array( 'bar' => 'baz' );
Run Code Online (Sandbox Code Playgroud)

当我在Vim中输入此内容时,按时会响起铃声>。如果我键入<something>,则不会发生这种情况,因此我认为这有助于说“啊,您已经关闭了尖括号,但没有打开!”。但这并没有帮助,只是似乎不了解上下文:分配给关联数组。

当我键入时,它也会发出哔哔声/铃声$foo->bar

我有set ft=php,除了这令人发指的哔哔声外,其他所有功能似乎都工作正常。

我知道我可以完全禁用提示音,但是我宁愿对某些确实需要发出提示音的事情保持提示音。我了解视觉铃声,但是我不想每次访问方法,属性或分配给新数组时都会让人头疼!

php vim

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

避免直接改变道具...但这似乎是官方示例所做的事情?

我正在编写一个递归树渲染器,并遭受“避免直接更改道具”警告。

据我了解,“道具减少,事件增加”意味着孩子不能/不应直接更改父数据。我可以通过编写很多代码来避免此错误,在这些代码中,一个组件$emit发生更改,其父组件捕获并重新发出该组件,然后不断执行,直到顶层组件最终可以更改数据,然后再通过树。虽然我得到了一个通用组件需要与其父组件无关的用例,但对于递归组件而言,它似乎效率极低。

我注意到提供了官方的VueJs 2 树视图示例。但是查看该代码显示,子组件被传递了属于父组件的对象,但是子组件仍被允许直接对其进行更新(例如,在addChild或changeType方法中)。

我对jsfiddle做了一个变体作为证明。我所做的所有更改都是将父级的数据输出为json,以便您可以看到它已更改。一开始看起来像这样:

{"name":"My Tree","children":[{"name":"hello"},{"name":"wat"}
Run Code Online (Sandbox Code Playgroud)

然后,如果您单击第一个父级,然后双击1. hello触发,changeType您将注意到父级的数据现在已更改:

{"name":"My Tree","children":[{"name":"hello","children":[{"name":"new stuff"}]},{"name":"wat"}... 
Run Code Online (Sandbox Code Playgroud)

...但是没有触发可怕的“避免直接改变道具”警告。

因此,我显然缺少一些细微差别。令人沮丧的是,对此有太多问题,我担心添加重复项。但是我觉得这是不同的,因为我在问“为什么给出的示例直接改变道具”?

javascript vue.js vuejs2

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