我必须创建几个代理,例如添加日志记录.像这样的东西:
interface IMath {
public int add(a, b);
}
class Math implements IMath {
public int add(a, b) { return a + b; }
}
class MathWithLogs implements IMath {
private IMath realMath;
public int add(a, b) {
Log.d("tag", "valueable info");
return realMath.add(a, b);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,只要这些接口不是20种方法,我只需要添加一些东西.
我的问题是,有没有办法用eclipse的一些插件自动生成包装类?
或者除非另有说明(比如@Override),否则有一种方法可以使用注释来调用realMath中的方法?
这是在延续我刚才的问题,并accroding对这个问题的答案,包装类的宣言
Java将原始数据类型包装到包装类然后为什么
char c = null; // invalid
int i = null; // invalid
Run Code Online (Sandbox Code Playgroud)
不允许但是
Character cObj = null; // valid
Integer iObj = null; // valid
Run Code Online (Sandbox Code Playgroud)
被允许.
我想从C++库生成C包装器.有关如何手动完成的教程:
但这太过于体力劳动.
例如,为此:
struct RtAudio {
virtual DeviceInfo const& f() {...}
class DeviceInfo {
virtual void g() { ... }
};
...
};
Run Code Online (Sandbox Code Playgroud)
我需要写:
struct RtAudioC {
RtAudio x;
};
struct DeviceInfo {
RtAudio::DeviceInfo x;
};
extern "C" {
RtAudioC* newRtAudio() {
return new RtAudioC;
}
void deleteRtAudio(RtAudioC *p {
delete p;
}
/* do something with RtAudio::f() */
void g(DeviceInfo *p) {
try {
p->x.g();
} catch (SomeError & err) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可以自动执行此过程的工具?
我已经创建了一个邮件包装器类.我知道有很多库可以发送电子邮件,但我想学习TDD ...所以,我已经创建了一些测试,我有一些代码.现在我可以在构造函数上设置电子邮件地址并验证它......如果电子邮件地址错误,则会引发异常.电子邮件地址是唯一一个必填字段...我没有设置和获取因为用户将在构造函数上设置所有电子邮件数据.
现在,我要编写发送测试.我不知道如何开始它.如果我不想有定位器和吸气剂,我怎么能测试值是否存在(主题,邮件正文,标题)?如何测试是否可以发送电子邮件?
现实世界的TDD示例对我来说很难.我试图了解它,我已经阅读了很多东西,但我无法测试真正的代码.
谢谢.
我喜欢在运行慢for循环时使用进度条.这可以通过几个助手轻松完成,但我确实喜欢tkProgressBar来自tcltk包.
一个小例子:
pb <- tkProgressBar(title = "Working hard:", min = 0, max = length(urls), width = 300)
for (i in 1:300) {
# DO SOMETHING
Sys.sleep(0.5)
setTkProgressBar(pb, i, label=paste( round(i/length(urls)*100, 0), "% ready!"))
}
close(pb)
Run Code Online (Sandbox Code Playgroud)
而且我想设置一个小函数存储在我的.Rprofile中,命名为forp(as:for循环带进度条),调用就像for但是使用自动添加的进度条 - 但遗憾的是不知道如何实现和抓取expr部分循环函数.我做了一些实验do.call但没有成功:(
虚构的工作示例(其作用类似于for循环,但TkProgressBar在每次迭代中创建并自动更新它):
forp (i in 1:10) {
#do something
}
Run Code Online (Sandbox Code Playgroud)
更新:我认为问题的核心是如何编写一个函数,该函数不仅在函数后面的括号中有参数(如:)foo(bar),而且还可以expr在结束括号后指定,如:foo(bar) expr.
BOUNTY OFFER:会找到任何可以修改我建议的函数的 …
我正在写一个装饰器来应用于一个函数.它应该捕获任何异常,然后根据原始异常消息引发自定义异常.(这是因为suds抛出一个通用的WebFault异常,我从它的消息中解析Web服务抛出的异常并引发Python异常来镜像它.)
但是,当我在包装器中引发自定义异常时,我希望堆栈跟踪指向引发原始WebFault异常的函数.到目前为止,我提出了正确的异常(它动态地解析消息并实例化异常类). 我的问题:如何保持堆栈跟踪指向引发WebFault异常的原始函数?
from functools import wraps
def try_except(fn):
def wrapped(*args, **kwargs):
try:
fn(*args, **kwargs)
except Exception, e:
parser = exceptions.ExceptionParser()
raised_exception = parser.get_raised_exception_class_name(e)
exception = getattr(exceptions, raised_exception)
raise exception(parser.get_message(e))
return wraps(fn)(wrapped)
Run Code Online (Sandbox Code Playgroud) 我有一个R包,它使用大量的Fortran子程序来进行递归线性代数计算的嵌套循环(严重依赖于BLAS和LAPACK例程).作为Fortran的接口,我使用了.Fortran函数.我刚刚阅读了Jonathan Callahan关于使用的博文,.Call而不是.C用C/C++编写的子程序,它让我觉得.Call在使用Fortran子程序时使用接口更好,通过在C中编写一个简单的包装然后调用Fortran子程序?
如上所述,我的Fortran代码非常简单,因为我只使用double或integer类型的多维数组.但是我已经知道我必须在R端编写相当多的检查,以确保一切都不会崩溃,因为我不小心忘记将某些矩阵的存储模式更改为整数或某些矩阵的维度已更改等.
子程序写为F90/95.
我的程序写入日志和stdout.但是,每条消息都有一定的优先级,用户在Preferences中指定哪个优先级转到哪个流(log或stdout).
unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0004;
Run Code Online (Sandbox Code Playgroud)
首选项由一些标志处理:
unsigned short PRIO_LOG = (PRIO_HIGH | PRIO_NORMAL);
unsigned short PRIO_STD = (PRIO_HIGH);
Run Code Online (Sandbox Code Playgroud)
该write_log函数应使用与printf函数相同的参数,并添加参数unsigned short priority.
write_log((PRIO_NORMAL|PRIO_LOW), "HELLO %s, take %d", "World", 1);
Run Code Online (Sandbox Code Playgroud)
(即使PRIO_NORMAL|PRIO_LOW没什么意义......)
检查标志很简单:( if(priority & PRIO_LOG)如果在两个参数中都设置了任何标志,则返回> 1)
但是,我不知道如何将字符串文字和格式参数传递给printf函数.任何人都可以帮助或给我一个指针(可能的替代方法可以实现相同的效果)?非常感谢.
我正在用PHP编写一个简单的SFTP客户端,因为我们需要通过n个远程服务器以编程方式检索文件.我正在使用PECL SSH2扩展.
不过,我遇到了一个障碍.php.net上的文档表明你可以这样做:
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
Run Code Online (Sandbox Code Playgroud)
但是,我有一个尝试类似的ls方法
public function ls($dir)
{
$rd = "ssh2.sftp://{$this->sftp}/$dir";
$handle = opendir($rd);
if (!is_resource($handle)) {
throw new SFTPException("Could not open directory.");
}
while (false !== ($file = readdir($handle))) {
if (substr($file, 0, 1) != '.'){
print $file . "\n";
}
}
closedir($handle);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
PHP Warning: opendir(): Unable to open ssh2.sftp://Resource id #5/outgoing on remote host
Run Code Online (Sandbox Code Playgroud)
这非常有意义,因为当您将资源转换为字符串时会发生这种情况.文档错了吗?我尝试用主机,用户名和主机替换资源,但这也不起作用.我知道路径是正确的,因为我可以从命令行运行SFTP,它工作正常.
有没有其他人尝试过使用SFTP的SSH2扩展?我错过了一些明显的东西吗?
更新:
我在内部的另一台机器上安装了sftp,它运行得很好.所以,我试图连接到的服务器必须有一些不起作用.
当我指定一个long具有常数值的数字时400,使用400L和之间是否有任何区别400l?
它与包装类型有一些关系吗?被L用来获取的包装Long,并l为原始数据类型long?