尽管我的JDO查询包含两个 declareParameters语句,但下面的代码会产生一个错误,声称只接受一个参数:
查询需要1个参数,但已提供2个值.
这两个参数是amountP和taxP:
javax.jdo.Query query= pm.newQuery(Main.class);
query.setFilter("amount == amountP && tax < taxP");
query.declareParameters("int amountP");
query.declareParameters("int taxP");
List<Main> results = (List<Main>)query.execute (amountP, taxP);
Run Code Online (Sandbox Code Playgroud)
但是,通过以下更改,它可以正常工作.
javax.jdo.Query query= pm.newQuery(Main.class);
query.setFilter("amount == amountP && tax < taxP");
query.declareParameters("int amountP, int taxP");
List<Main> results = (List<Main>)query.execute (amountP, taxP);
Run Code Online (Sandbox Code Playgroud)
我的问题是:原始语法出了什么问题?
更新:此问题已被其他人报告,但没有解释.
当我忘记在Serializable类中声明serialVersionUID时,我想让我的Maven构建失败.有javac,这很容易:
$ javac -Xlint:serial -Werror Source.java
Run Code Online (Sandbox Code Playgroud)
直接将其翻译为Maven不起作用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<compilerArgument>-Xlint:serial -Werror</compilerArgument>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
的compilerArgument被引用,因此javac仅接收一个参数,包含-Xlint:serial -Werror代替,-Xlint:serial并-Werror作为单独的参数.所以你阅读了文档,并找到compilerArguments:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<compilerArguments>
<Xlint:serial />
<Werror />
</compilerArguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪 - 冒号serial在Xlint命名空间中创建了元素,它没有在任何地方声明 - 但是它有效...直到你想要发布一个版本:
$ mvn release:prepare
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-project: Error reading POM: Error on line 58: The prefix "Xlint" for …
是否有可能做数分组(例如,将数字转换1000为字符串"1 000")使用一个通带仅正则表达式?(我知道正则表达式和语言设施之间的界限在某些系统中有点模糊 - 在回复之前倾听你的良心.)
我之所以问的原因:另一个开发人员最近问我如何在JavaScript中进行数字分组,并使用regexp向我展示了一个稍微不正确的JavaScript函数.我给了他一个更好的选择,但他的正则表达式唠叨我,因为这种重写肯定是常规语法应该能做的事情,但我真的无法弄清楚如何为它编写正则表达式.
这是我第一次天真的尝试,我知道这是不正确的:
function group(n) { return n.toString().replace(/(\d{3})/g, "$1 "); }
Run Code Online (Sandbox Code Playgroud)
这种方法有两个缺陷; group(1000)收益率"100 0"和group(100)收益率"100 "(尾随空间).你可以这样解决它:
String.prototype.reverse = function () {
var a = [];
for (var i = this.length; i >= 0; --i) a.push(this[i]);
return a.join("");
};
function group(n) {
return n.toString().reverse().replace(/(\d{3})/g, "$1 ").
trimRight().reverse();
}
Run Code Online (Sandbox Code Playgroud)
但这不是一个,不是两个,不是三个,而是四个通道(两个反转,一个替换,和trimRight)!然后我冒险进入后面的土地,并提出:
function group(n) { return n.toString().replace(/(\d{3}(?!\d))/g, " $1");
Run Code Online (Sandbox Code Playgroud)
...根本不起作用(编辑 - 可能是因为我混淆了后视和负面前瞻...... …
我有一个使用Oracle 11g数据库的应用程序.我有一个相当大的表(~50k行),我查询它:
SELECT omg, ponies FROM table WHERE x = 4
Run Code Online (Sandbox Code Playgroud)
x我发现,Field 没有编入索引.这个查询发生了很多,但问题是表现并不算太差.添加索引x确实使查询大约快两倍,这远远低于我的预期.比方说,MySQL,它至少会使查询速度提高十倍.(编辑:我在MySQL上测试了这个,并且看到了巨大的差异.)
我怀疑Oracle在检测到我经常查询非索引字段时会添加某种自动索引.我对么?在文档中我甚至都没有发现任何暗示.
我们正在研究用C编写的游戏引擎,目前我们正在使用以下命名约定.
ABClass object;
ABClassMethod(object, args)
Run Code Online (Sandbox Code Playgroud)
AB是我们的前缀.
我们的API,即使在对象上工作,也没有继承,多态或任何东西.我们所拥有的只是处理它们的数据类型和方法.
我们的常量命名相似:AB_ConstantName预处理器宏命名为AB_API_BEGIN.我们不使用像宏这样的函数.
我想知道这是如何适合作为C API.此外,您可能会注意到整个API都是包装器lua,您可以使用C或来自或lua.大多数时候发动机将从lua使用.