小编efr*_*itz的帖子

计算PHP DateInterval中的总秒数

计算两个日期之间总秒数的最佳方法是什么?到目前为止,我已尝试过以下方面:

$delta   = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
Run Code Online (Sandbox Code Playgroud)

但是,daysDateInterval对象的属性似乎在当前的PHP5.3版本中被破坏(至少在Windows上,它总是返回相同的6015值).我还试图以一种不能保存每个月(轮数到30天),闰年等天数的方式来做到这一点:

$seconds = ($delta->s)
         + ($delta->i * 60)
         + ($delta->h * 60 * 60)
         + ($delta->d * 60 * 60 * 24)
         + ($delta->m * 60 * 60 * 24 * 30)
         + ($delta->y * 60 * 60 * 24 * 365);
Run Code Online (Sandbox Code Playgroud)

但是我真的不满意使用这种半成品解决方案.

php datetime date

91
推荐指数
5
解决办法
6万
查看次数

Java元编程

我正在使用Java开发我的第一个真正的项目.尽管我对动态语言有更多的经验,但我开始对这门语言感到满意.

我有一个类似于以下的类:

class Single
{
    public void doActionA() {}
    public void doActionB() {}
    public void doActionC() {}
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个SingleList类充当这些类的集合(具体来说,它是用于2D Sprite库,而"actions"是各种变换:旋转,剪切,缩放等).我希望能够做到以下几点:

class SingleList
{
    public void doActionA() {
        for (Single s : _innerList) {
            s.doActionA();
        }
    }

    ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法简单地将方法(或已知的方法列表)推迟到内部列表的每个成员?无需专门列出每个方法的任何方式,然后遍历每个内部成员并手动应用它?

为了使事情变得更难,方法是不同的arity,但都是返回类型"void".

java metaprogramming dynamic

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

Java构造函数和字段初始化顺序

我知道Java对象构造函数隐式初始化它们的实例的非静态字段.但是,我不确定在类层次结构中发生这种情况的顺序.例如:

abstract public class AbstractPieceSequence implements PieceSequence
{
    private Tetromino current;
    private Tetromino preview;

    public AbstractPieceSequence()
    {
        advance();
    }

    @Override
    public final void advance()
    {
        if (preview == null) {
            current = getNextPiece();
            preview = getNextPiece();
        } else {
            current = preview;
            preview = getNextPiece();
        }
    }

    abstract protected Tetromino getNextPiece();
}
Run Code Online (Sandbox Code Playgroud)
public class ShufflePieceSequence extends AbstractPieceSequence
{
    private List<Shape> bag = new LinkedList<Shape>();

    @Override
    protected Tetromino getNextPiece()
    {
        if (bag.size() == 0) {
            Collections.addAll(bag, Shape.I, Shape.J, Shape.L, Shape.O, Shape.S, …
Run Code Online (Sandbox Code Playgroud)

java inheritance initialization

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

单元测试数据结构的内部状态

我的任务是为大量度量数据结构(即四叉树kd树变体)创建实现.我有大约四个这样的实现,但我目前测试的方式不是,因为我缺乏一个更好的词,好.

我需要一种干净的方法来测试从这些树/特里结构中插入和删除数据的方式,我可以测试节点的内部结构(检查父节点,子节点,排序等).这些实现以下独立的正确性证明和运行分析,所以我需要确保不仅是一个节点正确插入(意味着,从树上以后检索),而且在树上的一个很"正确"的位置.

然而,"单元测试"似乎是错误的方法,因为如果我没有弄错的话,它的目的是测试结构或系统的外部API.我见过很多的单元测试相关的问题问"我如何才能进入私人领域的单元测试"或"我怎么测试一个非公开的方法的返回值",得到的回答一般是"不要" t" - 我同意这个答案.

因此,我不会让任何愿意帮助的人只是模糊的ramblings,我的树实现的接口如下(基于java集合的Map接口):

public interface SpatialMap<K, V> extends Iterable<SpatialMap.Entry<K, V>>
{
// Query Operations

/**
 * Returns the number of key-value mappings in this map. If the map contains more than
 * <tt>Integer.MAX_VALUE</tt> elements, returns <tt>Integer.MAX_VALUE</tt>.
 * 
 * @return The number of key-value mappings in this map.
 */
int size();

/**
 * Returns <tt>true</tt> if this map contains no key-value mappings.
 * 
 * @return <tt>true</tt> if this map contains no key-value mappings. …
Run Code Online (Sandbox Code Playgroud)

java unit-testing data-structures

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

PHP 刷新所有级别的输出缓冲

我正在尝试实现一个简单的 Http Response 类,该类实现 Http Streaming (或 Chunked-Encoding)。为了实现这一点,我需要output_buffering = Off在 php.ini 中进行设置,并以一定的时间间隔刷新输出。

PHP 自动很好地完成了这项工作——除了实际的刷新机制。我已经让它工作了,但我不确定它是否太过分了。我想知道如何立即刷新每个级别的输出缓冲,而不调用十亿个函数(我不确定哪些函数在哪些环境/哪些场景中是多余的)。

    while (ob_get_level())
    {
        ob_end_flush();
    }

    // print the buffer

    flush();
    ob_flush();
Run Code Online (Sandbox Code Playgroud)

这是否太过分了?

php output-buffering

5
推荐指数
1
解决办法
4973
查看次数

从 WatchEvent 确定已删除文件的类型

我有一个WatchService监视目录树的ENTRY_CREATE, ENTRY_DELETEANDENTRY-MODIFY事件。问题是 a 的上下文WatchEvent<?>只给出了一个 Path 对象。在删除事件中,我不确定路径是否引用了常规文件的目录。

WatchKey key = null;

try {
    key = watcher.take();
} catch (InterruptedException e) {
    e.printStackTrace();
}

for (WatchEvent<?> event : key.pollEvents()) {
    if (event.kind() == StandardWatchEventKinds.OVERFLOW) {
        continue;
    }

    Path parent = (Path) key.watchable();
    Path p = parent.resolve((Path) event.context());

    for (DirectoryModifiedListener listener : listeners) {
        if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
            // only do this if p referred to a file, not a directory
            listener.onFileCreated(p);
        } …
Run Code Online (Sandbox Code Playgroud)

java io nio watchservice

5
推荐指数
1
解决办法
1324
查看次数

Lisp格式化多项式

我将稀疏多项式表示为(系数,对)的列表.例如:

'((1 2) (3 6) (-20 48)) => x^2 + 3x^6 - 20x^48
Run Code Online (Sandbox Code Playgroud)

我是Lisp格式的新手,但是遇到了一些非常漂亮的工具,例如(format nil "~:[+~;-~]" (> 0 coefficient))将系数的符号作为文本(我知道,这可能不是惯用的).

但是,格式化单个术语时存在某些显示问题.例如,以下内容应该都是真的:

(1 0) => 1x^0 => 1    (reducible)
(1 1) => 1x^1 => x    (reducible)
(1 2) => 1x^2 => x^2  (reducible)
(2 0) => 2x^0 => 2    (reducible)
(2 1) => 2x^1 => 2x   (reducable)
(2 2) => 2x^2 => 2x^2 (this one is okay)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以在没有大量系列ifcond宏的情况下做到这一点 - 这种方式只需用一个format模式来实现.一切都有效但是"美化"这些术语(最后一行FormatPolynomialHelper3应该这样做).

(defun FormatPolynomial …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

3
推荐指数
1
解决办法
687
查看次数