小编Dan*_*den的帖子

如果没有实现"next",这个类如何实现"__iter__"方法?

我在django.template中有以下代码:

class Template(object):
    def __init__(self, template_string, origin=None, name='<Unknown Template>'):
        try:
            template_string = smart_unicode(template_string)
        except UnicodeDecodeError:
            raise TemplateEncodingError("Templates can only be constructed from unicode or UTF-8 strings.")
        if settings.TEMPLATE_DEBUG and origin is None:
            origin = StringOrigin(template_string)
        self.nodelist = compile_string(template_string, origin)
        self.name = name

    def __iter__(self):
        for node in self.nodelist:
            for subnode in node:
                yield subnode

    def render(self, context):
        "Display stage -- can be called many times"
        return self.nodelist.render(context)
Run Code Online (Sandbox Code Playgroud)

我困惑的部分如下.这种__iter__方法有什么用?我找不到任何相应的next方法.

def __iter__(self):
        for node in self.nodelist:
            for subnode …
Run Code Online (Sandbox Code Playgroud)

python iterator yield

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

Python的哪些功能会激发C#开发人员的兴趣?

对于那些喜欢在C#编程很长一段时间并计划学习新语言的人,我发现Python社区比其他许多人更紧密.

个人动态打字让我失望,但我对Python社区围绕它的方式感到着迷.还有很多其他的东西,我希望我会错过Python(LINQ,表达式树等)

开发人员喜欢的Python有哪些好处?比C#更令我兴奋的东西.

c# python programming-languages

20
推荐指数
5
解决办法
2944
查看次数

什么是外墙类的好名字?

一点背景:我们正在建立一个与科学模型合作的图书馆/框架.我们有一个接口Model,它定义了模型必须实现的操作,这是非常小的.即:Model界面从模型实现者的角度定义模型的契约.

该框架增加了大量的模型周围的其他的功能,但现在的客户端代码有使用一堆其他类,如访问功能ModelInfo,ModelHost,ModelInstance,等.

在我们使用这个框架的应用程序中,我们不希望实际上必须处理运行模型等所有这些机制.所以我们决定使用façade模式将框架功能包装在一个易于使用的框架中.使用对象.(我们已经将这种模式应用到框架的其他部分,并取得了很好的成功.)

这是一个问题:假设我们已经有了一个接口Model,那么façade类的名字是什么?Model界面框架和之间的合同模型实现,以及新的类将定义框架和之间的合同客户端应用程序.

或者,更一般地说:当我们有一个库或框架提供的抽象时,我们如何命名抽象的"双方",以便清楚地识别抽象的"提供者"和"消费者"接口

(如果重要的是,对于这个项目,我们使用的是Java 6.)

oop design-patterns facade naming-conventions

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

如何让一个Maven模块依赖另一个?

好的,我以为我明白了如何使用Maven ......

我有一个主项目M具有子项目A,BC. C包含一些常用的功能(主要是接口)AB.我可以运行mvn compile jar:jar从项目的根目录(该M目录),并得到JAR文件A.jar,B.jarC.jar.(目前所有这些工件的版本都是2.0-SNAPSHOT.)

pom.xml在文件M目录列出C其下<dependencyManagement>的标签,以便AB可以引用C由只包括一个参考,就像这样:

<dependency>
    <groupId>my.project</groupId>
    <artifactId>C</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我可以从命令行运行mvn compile,一切正常.但是,当我在NetBeans中打开项目时,它会抱怨问题:"某些依赖项工件不在本地存储库中",并且它表示缺少的工件是C.同样,从命令行,如果我更改为AB目录并尝试运行,mvn compile我会得到"构建错误:无法解决工件".

我希望我可以手动转到我的C.jar构建和运行的位置mvn install:install-file,但我宁愿找到一个解决方案,使我能够直接在NetBeans中工作(和/或使用m2eclipse在Eclipse中).

我究竟做错了什么?

java maven-2 netbeans

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

在JUnit 4中重用测试实现?

我有一个界面,例如:

public interface Thing {
  FrobResult frob(FrobInput); 
}
Run Code Online (Sandbox Code Playgroud)

和界面的实现(例如NormalThing,ImmutableThing,AsyncThing),我想测试.

我的许多测试方法都是关于确保接口正确实现,因此在每个Thing实现中都是重复的.在JUnit 3中,一个常见的解决方案是创建一个基类(扩展TestCase),然后由每个实现类进行子类化.但这是JUnit 4的正确方法吗?

可能的替代方案(我相信)优先顺序升序:

  1. Cut'n'paste重复的测试方法.根本不干,但我觉得在测试中不如生产代码那么令人担忧.

  2. 使用@Test方法创建一个抽象类,并为每个实现测试类创建子类.(通常在JUnit 3测试中看到 - 这仍然是进入JUnit 4的好方法吗?)

  3. 将常用测试方法放入辅助类中,并在每个实现上调用它.(组成而不是继承.)

做#3的最佳做法是什么?也许@RunWith(Parameterized.class)每个实现参数化的测试?或者有更好的方法来实现这一目标吗?

java code-reuse unit-testing junit4

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

使用Eclipse编译器而不是javac会导致javadoc崩溃

摘要:

我遇到了一个有趣的问题,我不太确定如何侦察它:

  • 我们的项目已经建好几个月了
  • 我更改了maven-compiler-plugin使用eclipse编译器而不是javac
  • 现在,当我跑mvn site,maven-javadoc-plugin失败
  • 根据堆栈跟踪,看起来Javadoc工具正在崩溃Eclipse编译器创建的类文件

有没有什么办法解决这一问题?如果没有,是否至少有进一步调试的方法?

详细信息:

我正在使用Java 1.6.0_27和Maven 3.0.2.

我一直在使用javac编译器来构建我们的代码库,但是我对尝试Eclipse编译器感兴趣,因为它产生了更好的警告(并且在其他方​​面更易于配置).

所以我maven-compiler-plugin将pom.xml中的定义更改为:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <compilerId>eclipse</compilerId>
        <source>1.6</source>
        <target>1.6</target>
        <compilerArgument>-warn:+boxing,enumSwitch,javadoc,hashCode</compilerArgument>
        <showWarnings>true</showWarnings>
        <showDeprecation>true</showDeprecation>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>1.8.2</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

在我的<reporting>部分中,我有:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.8</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我做了一个mvn clean install,一切都很好,所有测试都通过,一切看起来都很棒.

但是当我尝试运行时mvn site,当它到达Javadoc报告时,它失败了,似乎是一个Javadoc崩溃:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.0:site (default-site) on project framework: Error during page generation: Error rendering Maven report:
[ERROR] …
Run Code Online (Sandbox Code Playgroud)

java javadoc maven maven-javadoc-plugin

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

由于虚假的唤醒,Semaphore.acquire()会抛出InterruptedException吗?

一个看似简单的问题:我有一个java.util.concurrent.Semaphore,我希望获得许可证使用acquire().

如果线程被中断,acquire()则指定该方法抛出InterruptedException:

如果当前线程:

  • 在进入此方法时设置其中断状态; 要么
  • 在等待许可证时被打断,

然后抛出InterruptedException并清除当前线程的中断状态.

但是,使用可能抛出的方法的通常模式InterruptedException是在循环中调用它们,因为线程可能受到虚假唤醒的影响,这些唤醒看起来与被中断相同.例如,文档Object.wait(long)说:

线程也可以在没有被通知,中断或超时的情况下唤醒,即所谓的虚假唤醒.虽然这在实践中很少发生,但应用程序必须通过测试应该导致线程被唤醒的条件来防范它,并且如果条件不满足则继续等待.换句话说,等待应始终在循环中进行.

所以问题是,是否Semaphore.acquire()受到同样的虚假唤醒?合乎逻辑的答案是"不",但我找不到任何证据,实际上证据似乎指向了另一个方向.

查看源代码Semaphore,它似乎将实际的获取委托给a AbstractQueuedSynchronizer,根据其来源代表LockSupport.park().

明确提到虚假唤醒的文档LockSupport.park(),但实现AbstractQueuedSynchronizer.doAcquireInterruptably()似乎只是检查Thread.interrupted()然后抛出InterruptedException.

所以,除非我遗漏了某些东西(这是非常可能的),否则看起来可能Semaphore.acquire() 抛出InterruptedException虚假的东西?

那是对的吗?更重要的是,我能做些什么吗?我可以使用Semaphore.acquireUninterruptably(),但我不想要一个不间断的等待,只是一个不会被虚假中断的.还有其他选择吗?

java semaphore java.util.concurrent

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

我们应该gitignore .python-version文件吗?

我有一个.python-version文件,当我用github创建一个Python repo并指定它应该有一个时.gitignore,它会将.python-version文件添加到它.在我看来,该文件不应该被忽略,因为在不同机器上运行代码的其他人想要知道他们需要什么版本的Python.

那么为什么呢.gitignore

python github gitignore pyenv

10
推荐指数
3
解决办法
705
查看次数

将两个网络摄像头合并为一个直播流 - 以编程方式

我有两个网络摄像头,我想将他们的流合并到一个直播预览中,并将其显示在屏幕上.

我擅长C#/ Java编程,请你帮我找一个帮我实现这个目标的框架?

谢谢,

c# java video video-capture video-processing

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

是否可以使用Visual C++编译pre-ANSI(K&R-style)C代码?

我们有一些旧的C代码,具有预ANSI(K&R风格)函数声明.例如:

int foo(x, y)
double x, y;
{
    /* do some stuff */
}
Run Code Online (Sandbox Code Playgroud)

是否有编译器开关在Visual C++ 2008中启用对此的支持?

c visual-studio-2008 visual-studio visual-c++

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