我在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) 对于那些喜欢在C#编程很长一段时间并计划学习新语言的人,我发现Python社区比其他许多人更紧密.
个人动态打字让我失望,但我对Python社区围绕它的方式感到着迷.还有很多其他的东西,我希望我会错过Python(LINQ,表达式树等)
开发人员喜欢的Python有哪些好处?比C#更令我兴奋的东西.
一点背景:我们正在建立一个与科学模型合作的图书馆/框架.我们有一个接口Model
,它定义了模型必须实现的操作,这是非常小的.即:Model
界面从模型实现者的角度定义模型的契约.
该框架增加了大量的模型周围的其他的功能,但现在的客户端代码有使用一堆其他类,如访问功能ModelInfo
,ModelHost
,ModelInstance
,等.
在我们使用这个框架的应用程序中,我们不希望实际上必须处理运行模型等所有这些机制.所以我们决定使用façade模式将框架功能包装在一个易于使用的框架中.使用对象.(我们已经将这种模式应用到框架的其他部分,并取得了很好的成功.)
这是一个问题:假设我们已经有了一个接口Model
,那么façade类的名字是什么? 该Model
界面框架和之间的合同模型实现,以及新的类将定义框架和之间的合同客户端应用程序.
或者,更一般地说:当我们有一个库或框架提供的抽象时,我们如何命名抽象的"双方",以便清楚地识别抽象的"提供者"和"消费者"接口?
(如果重要的是,对于这个项目,我们使用的是Java 6.)
好的,我以为我明白了如何使用Maven ......
我有一个主项目M
具有子项目A
,B
和C
. C
包含一些常用的功能(主要是接口)A
和B
.我可以运行mvn compile jar:jar
从项目的根目录(该M
目录),并得到JAR文件A.jar
,B.jar
和C.jar
.(目前所有这些工件的版本都是2.0-SNAPSHOT
.)
主pom.xml
在文件M
目录列出C
其下<dependencyManagement>
的标签,以便A
和B
可以引用C
由只包括一个参考,就像这样:
<dependency>
<groupId>my.project</groupId>
<artifactId>C</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我可以从命令行运行mvn compile
,一切正常.但是,当我在NetBeans中打开项目时,它会抱怨问题:"某些依赖项工件不在本地存储库中",并且它表示缺少的工件是C
.同样,从命令行,如果我更改为A
或B
目录并尝试运行,mvn compile
我会得到"构建错误:无法解决工件".
我希望我可以手动转到我的C.jar
构建和运行的位置mvn install:install-file
,但我宁愿找到一个解决方案,使我能够直接在NetBeans中工作(和/或使用m2eclipse在Eclipse中).
我究竟做错了什么?
我有一个界面,例如:
public interface Thing {
FrobResult frob(FrobInput);
}
Run Code Online (Sandbox Code Playgroud)
和界面的实现(例如NormalThing
,ImmutableThing
,AsyncThing
),我想测试.
我的许多测试方法都是关于确保接口正确实现,因此在每个Thing
实现中都是重复的.在JUnit 3中,一个常见的解决方案是创建一个基类(扩展TestCase
),然后由每个实现类进行子类化.但这是JUnit 4的正确方法吗?
可能的替代方案(我相信)优先顺序升序:
Cut'n'paste重复的测试方法.根本不干,但我觉得在测试中不如生产代码那么令人担忧.
使用@Test
方法创建一个抽象类,并为每个实现测试类创建子类.(通常在JUnit 3测试中看到 - 这仍然是进入JUnit 4的好方法吗?)
将常用测试方法放入辅助类中,并在每个实现上调用它.(组成而不是继承.)
做#3的最佳做法是什么?也许@RunWith(Parameterized.class)
每个实现参数化的测试?或者有更好的方法来实现这一目标吗?
我遇到了一个有趣的问题,我不太确定如何侦察它:
maven-compiler-plugin
使用eclipse
编译器而不是javac
mvn site
,maven-javadoc-plugin
失败有没有什么办法解决这一问题?如果没有,是否至少有进一步调试的方法?
我正在使用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.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()
,但我不想要一个不间断的等待,只是一个不会被虚假中断的.还有其他选择吗?
我有一个.python-version
文件,当我用github创建一个Python repo并指定它应该有一个时.gitignore
,它会将.python-version
文件添加到它.在我看来,该文件不应该被忽略,因为在不同机器上运行代码的其他人想要知道他们需要什么版本的Python.
那么为什么呢.gitignore
?
我有两个网络摄像头,我想将他们的流合并到一个直播预览中,并将其显示在屏幕上.
我擅长C#/ Java编程,请你帮我找一个帮我实现这个目标的框架?
谢谢,
我们有一些旧的C代码,具有预ANSI(K&R风格)函数声明.例如:
int foo(x, y)
double x, y;
{
/* do some stuff */
}
Run Code Online (Sandbox Code Playgroud)
是否有编译器开关在Visual C++ 2008中启用对此的支持?