我们有一个库,可以处理错误报告的许多方面.我的任务是将此库移植到Linux.当我的小测试套件运行时,其中一个测试失败了.测试的简化版本如下所示.
// Compiler: 4.1.1 20070105 RedHat 4.1.1-52
// Output: Terminate called after throwing an instance of 'int' abort
#include <iostream>
#include <csignal>
using namespace std;
void catch_signal(int signalNumber)
{
signal(SIGINT, SIG_DFL);
throw(signalNumber);
}
int test_signal()
{
signal(SIGINT, catch_signal);
try
{
raise(SIGINT);
}
catch (int &z)
{
cerr << "Caught exception: " << z << endl;
}
return 0;
}
int main()
{
try
{
test_signal();
}
catch (int &z)
{
cerr << "Caught unexpected exception: " << z << endl; …Run Code Online (Sandbox Code Playgroud) 我正在看Yahoo的YUI压缩器可执行jar,他们有这个类,从Manifest文件链接为"Main-Class":
package com.yahoo.platform.yui.compressor;
import java.lang.reflect.Method;
public class Bootstrap {
public static void main(String args[]) throws Exception {
ClassLoader loader = new JarClassLoader();
Thread.currentThread().setContextClassLoader(loader);
Class c = loader.loadClass(YUICompressor.class.getName());
Method main = c.getMethod("main", new Class[]{String[].class});
main.invoke(null, new Object[]{args});
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来像一个无用的包装.为什么不直接把它YUICompressor作为主类呢?这样做有什么理由吗?
谢谢.
我正在看MvcContrib网格组件,我很着迷,但同时被网格语法中使用的语法技巧击退:
.Attributes(style => "width:100%")
Run Code Online (Sandbox Code Playgroud)
上面的语法将生成的HTML的style属性设置为width:100%.现在如果你注意,"风格"没有指定,是从表达式中参数的名称推断出来的!我不得不深入研究这个并发现"神奇"发生的地方:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,代码使用正式的编译时,参数名来创建属性名称 - 值对的字典.结果语法结构确实非常具有表现力,但同时也非常危险.lambda表达式的一般用法允许替换使用的名称而没有副作用.我在一本书中看到一个例子,说collection.ForEach(book => Fire.Burn(book))我知道我可以用我的代码编写collection.ForEach(log => Fire.Burn(log)),这意味着同样的事情.但是使用MvcContrib网格语法突然间,我发现代码主动查找并根据我为变量选择的名称进行分解!
这是C#3.5/4.0社区和lambda表达爱好者的常见做法吗?或者是一个我不应该担心的流氓一招特立独行?
我有一个类,它暴露了一个字符串值和一个int值(分别是一个命令输出和退出代码).除了通过to_s和暴露它们之外to_i,我也在使用,to_str并且to_int像这样:
class Status
def to_s
@output
end
alias :to_str :to_s
def to_i
@status.exitstatus
end
alias :to_int :to_i
end
Run Code Online (Sandbox Code Playgroud)
我的想法是能够在尽可能多的情况下使用此对象.将它强制转换为字符串或int会增加可用性.例如,我可以用字符串连接对象:
a_string = "Output was: " + results
Run Code Online (Sandbox Code Playgroud)
(我想用这个作为int强制的例子,但Fixnum.+不喜欢它,所以它实际上不起作用:)
an_int = 1 + results
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所读过的所有内容都表示,这可能是一件"糟糕"的事情.常见的主题是这样的:" 当to_s/ to_i您的对象可以表示为字符串/ int时,to_str//to_int仅当您的对象基本上是字符串/ int时".
毫无疑问,我的课程不是"基本上"字符串或整数.但是我对这个规则有一些问题:
Float.to_int很多提到的.故事说,由于浮点数始终具有整数分量,因此to_int是一种有效的方法.但是,我认为这是虚假的:浮点数不是整数(因为它有一个非整数组件),所以试图将它们的"类型"等同起来并没有多大意义.你可以合法地将 Float 转换为整数(通过截断),但我可以说我也可以将我的状态转换为整数(通过"截断"所有非退出代码信息). …pthreads 是否支持任何允许您查询递归互斥锁被锁定次数的方法?
我有一个多模块项目,我想部署一个站点,但似乎我的站点部署配置不是由子项目子模块继承.
在文件系统上,它们相对于彼此定位:
/parent/
/moduleA/
/moduleB/
Run Code Online (Sandbox Code Playgroud)
当我跑:
mvn site-deploy -P documentation
Run Code Online (Sandbox Code Playgroud)
我的父项目已正确部署到:
但是没有像moduleA或moduleB这样的子项目在那里部署,因为我期望子模块继承父分发管理:
这是我的父pom.xml,我删除了一些无关的细节和报告插件(我包含了我的javadoc插件,它使用APIViz有点时髦,并且聚合以确保聚合父javadoc和子javadoc正确使用APIViz.):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.webwars</groupId>
<artifactId> parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>parent</name>
<distributionManagement>
<site>
<id>webwarsDev.website</id>
<url>scp://devServer/documentation/webwars/</url>
</site>
</distributionManagement>
<modules>
<module>../moduleA</module>
<module>../moduleB</module>
</modules>
<profiles>
<profile>
<id>documentation</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<executions>
<execution>
<id>verify_pmd</id>
<phase>verify</phase>
<goals>
<goal>pmd</goal>
</goals>
<configuration>
<linkXref>true</linkXref>
<minimumTokens>20</minimumTokens>
<targetJdk>1.6</targetJdk>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<plugins> …Run Code Online (Sandbox Code Playgroud) maven-2 javadoc documentation-generation maven-plugin maven-site-plugin
所以,我有一个需要实现的一堆方法的接口,方法名称是无关紧要的.
实现此接口的对象通常被放入集合中,并且还具有我希望它们使用的特殊toString()格式.
所以,我认为将hashCode(),equals()和toString()放入接口会很方便,以确保我记得覆盖这些的默认方法.但是当我将这些方法添加到接口时,如果我没有实现这三个方法,IDE/Compiler就不会抱怨,即使我明确地将它们放在接口中.
为什么不对我强制执行?它抱怨如果我没有实现任何其他方法,但它没有强制执行这三个方法.是什么赋予了?有线索吗?
如何使用给定的引擎显示MySQL中的所有表,例如InnoDB,MyISAM,FEDERATED?
zenity当我的垃圾邮件过滤器守护程序过滤一组邮件时,我正在发布一个简单的通知.目前此消息已发布到屏幕中间,这是突兀的.我想将它发布到左上角.但是,zenity不尊重-geometry应该是所有X应用程序的标准选项,并且其文档提供了控制窗口高度和宽度的选项,但不提供放置.
有没有办法控制zenity窗口张贴的(x,y)坐标?
如果没有,有没有办法通过修改X资源或窗口管理器来解决这个问题(我正在使用fvwm)?
编辑:以下内容不起作用~/.fvwm2rc(fvwm版本2.5.26):
Style "Information" PositionPlacement -0 -0
Style "Zenity" PositionPlacement -0 -0
Run Code Online (Sandbox Code Playgroud)
它们也不适用于-0 -0删除,如手册页中所示.(窗口标题为zenity --info"信息".)
有趣的是,zenity忽略了我之前的窗口管理器指令,默认情况下应手动放置窗口.
编辑:
在许多其他有趣的信息中,xprop(1)有关zenity窗口的报告:
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG
WM_NORMAL_HINTS(WM_SIZE_HINTS):
program specified location: 0, 0
program specified minimum size: 307 by 128
program specified maximum size: 307 by 128
window gravity: NorthWest
WM_CLASS(STRING) = "zenity", "Zenity"
WM_ICON_NAME(STRING) = "Information"
WM_NAME(STRING) = …Run Code Online (Sandbox Code Playgroud) 我想编译10.5版本的应用程序并转发.自从我升级到Snow Leopard并安装了最新的XCode后,gcc默认为10.6.我已经尝试了-isysroot /Developer/SDKs/MacOSX10.5.sdk,但这似乎不起作用.是否有允许我设置SDK的GCC标志?
(顺便说一句,我改变了gcc符号链接指向gcc-4.0而不是gcc-4.2并且它工作但我认为我可以告诉最新的GCC编译旧的SDK).
谢谢,芮