小编eri*_*ork的帖子

在PHP中正确实现虚函数?

在我的工作场所(仅限PHP),我们有一个用于数据库抽象的基类.如果要将新数据库表添加到基础层,则必须创建此基类的子类,并重写某些方法以定义使用此表的各个行为.正常行为应该保持不变.

现在我在我们公司看到了许多新的程序员,他们只是覆盖了默认行为的方法.有些人很擅长放入所有默认行为,只是在他们喜欢的地方添加个别内容,其他人则试图使用基类及其继承者.

我第一个想到解决这个问题的想法是考虑应该通过继承类来覆盖的抽象方法.但是除了反对抽象方法的其他论据之外,"抽象"只是没有说明为什么基类不能被它自己使用以及为什么应该覆盖这些函数.

经过一些谷歌搜索后,我没有找到一个很好的答案在PHP中实现"真正的"虚拟功能(只是有一个虚拟功能,几乎杀死了具体实现的所有希望).

那么,你会对这件事做些什么呢?

php oop polymorphism virtual-functions

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

System.out关闭了吗?我可以重新打开吗?

我正在帮朋友写一些Java代码,他们对Java知之甚少.所以我给他写了一些辅助函数来轻松完成他眼中有点古怪的事情.其中一个是一个函数,它将一个String写入一个OutputStream.看一看:

public void write(String txt, OutputStream out) {
    PrintWriter printer = new PrintWriter(out);
    printer.print(txt);
    printer.close();
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过不同的方式轻松地使用它来编写您想要的任何位置.例如,你可以这样做:

(new StreamHelper()).write("Hello Test", System.out);
Run Code Online (Sandbox Code Playgroud)

这样做我发现之后System.out.println()不再向shell写任何东西了.所以我认为也许会printer.close()自动关闭System.out,我想知道如何重新激活它,我可以在此功能再次完成后使用它.

我的假设是否正确?(如果不问这里我怎么能找到?)

如何System.out在调用该write()函数后继续使用?

是否有更好的方法来编写这样的辅助函数?

java io

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

^我在vim中的含义以及如何不显示它们?

由于我:set list在Vim中,我经常^I在一些C文件的开头看到奇怪的字符.这些是标签的列表或它们是什么意思?我怎样才能将其恢复正常?我只想看到行尾字符.

vim

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

如何测试打印报表?

你想unittest为这样的函数编写-cases:

def test_me(a):
    for b in c:
        print do_something(a,b)
Run Code Online (Sandbox Code Playgroud)

起初我想过只收集do_something字符串中的输出然后返回它,一起打印和测试整个输出.但它并不总是很方便,因为这样的循环可能会导致缓冲区字符串变得非常大,具体取决于具体情况.那么,在打印并且不返回输出时,您可以做些什么来测试输出?

python unit-testing stdout

18
推荐指数
2
解决办法
8612
查看次数

回声"#!" 失败 - "未找到事件"

以下失败,我不明白为什么:

$ echo "#!"
Run Code Online (Sandbox Code Playgroud)

以下也失败并出现相同的错误消息:

$ echo "\#!"
Run Code Online (Sandbox Code Playgroud)

错误信息:

-bash: !": event not found
Run Code Online (Sandbox Code Playgroud)

为什么会失败?该怎么echo办呢?

bash echo ubuntu-12.04

13
推荐指数
3
解决办法
2157
查看次数

Java:如何写equals()更短

当我必须编写近10行代码时,我感到头疼2 Objects are equal, when their type is equal and both's attribute is equal.您可以很容易地看到,通过这种写入方式,行数随着属性数量的增加而急剧增加.

public class Id implements Node {

        private String name;

        public Id(String name) {
                this.name = name;
        }

        public boolean equals(Object o) {
                if (o == null)
                        return false;
                if (null == (Id) o)
                        return false;
                Id i = (Id) o;
                if ((this.name != null && i.name == null) || (this.name == null && i.name != null))
                        return false;
                return (this.name == null && i.name …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
3
解决办法
4417
查看次数

matplotlib.pyplot如何在同一个图中命名不同的行?

想想这样做:

import matplotlib.pyplot as plt

plt.plot(x_A,y_A,'g--')
plt.plot(x_B,y_B,'r-o')
plt.show()
Run Code Online (Sandbox Code Playgroud)

你会如何给两行提供不同的名称,例如Microsoft Excel会这样做?

python diagram plot matplotlib

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

为什么鼻子测试找不到任何东西?

我正在从python的unittest框架切换到nosetests,试图重用我的unittest.TestCases

之后cd荷兰国际集团到我的测试包,我开始nosetests 作为他们的主页上说明:

./test/$ nosetests

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

为什么我需要指定每个模块让鼻子发现它的测试,如下例所示?

./test/$ nosetests test_all.py
.......
----------------------------------------------------------------------
Ran 7 tests in 0.002s

OK
Run Code Online (Sandbox Code Playgroud)

同时运行测试上面的一个文件夹不会改变任何东西.

./tests/$ cd ..
./$ nosetests

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

python unit-testing

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

Grepping Make Output

当尝试从make过滤特定警告或错误消息的非常长的输出时,第一个想法是这样的:

$ make | grep -i 'warning: someone set up us the bomb'
Run Code Online (Sandbox Code Playgroud)

但结果并不完全令人满意.输出将不仅包含从筛选结果grep,还stdoutstderr消息从在使用的其他工具make的目标的地方.

现在的问题是:

  1. 其他输出来自哪里?
  2. 如何编写输出只包含过滤行的过滤器命令?

grep makefile

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

理解Go中Kubernetes API框架的逻辑

我目前正试图围绕学习Go,我之前没有使用的kubernetes API的一些细节和Go的kubernetes api框架,并且非常感谢你帮助理解该框架的语法和为什么人们仍然使用它.

老实说,如果它包含与REST端点相同的信息,我不确定为什么首先使用框架.仅通过http库直接调用API会不会更有意义?

这是一个例子(取自一些真实的代码):

pod, err := kubecli.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{})
Run Code Online (Sandbox Code Playgroud)

我觉得麻烦的是,我必须在API文档中查找所有内容,然后我还需要弄清楚/v1/转换为CoreV1().而且我甚至不确定我能在哪里看到它.整个块metav1.GetOptions{}似乎完全没必要,或者HTTP请求的哪一部分由它表示?

我希望我能弄清楚这种混乱是什么,并希望你帮助清理它.

编辑:

这里也是一个例子,它是从新的运算符框架生成的,遗憾的是它并没有让它变得更好:

 return &v1.Pod{
    TypeMeta: metav1.TypeMeta{
            Kind:       "Pod",
            APIVersion: "v1",
    },
    ObjectMeta: metav1.ObjectMeta{
            Name:      "busy-box",
            Namespace: cr.Namespace,
            OwnerReferences: []metav1.OwnerReference{
                    *metav1.NewControllerRef(cr, schema.GroupVersionKind{
                            Group:   v1alpha1.SchemeGroupVersion.Group,
                            Version: v1alpha1.SchemeGroupVersion.Version,
                            Kind:    "Memcached",
                    }),
            },
            Labels: labels,
    },
    Spec: v1.PodSpec{
            Containers: []v1.Container{
                    {
                            Name:    "busybox",
                            Image:   "busybox",
                            Command: []string{"sleep", "3600"},
                    },
            },
    },
 }
Run Code Online (Sandbox Code Playgroud)

API文档不知道这事TypeMeta的对象.并且第二个元素被调用ObjectMeta:而不是metadata …

api rest go kubernetes

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