小编enr*_*rey的帖子

一个函数应该只有一个return语句吗?

是否有充分的理由说明为什么在函数中只有一个return语句是更好的做法?

或者,一旦逻辑正确就可以从函数返回,这意味着函数中可能有很多返回语句?

language-agnostic coding-style

781
推荐指数
28
解决办法
23万
查看次数

将Node.js作为客户端连接到Common Lisp服务器

我在node.js的alpha阶段有一个小但CPU重的应用程序,这是一个小游戏.我遇到了性能问题,我需要将其加速至少20倍才能达到测试版.而且由于并行执行会让我走得很远,所以我认为良好的开端是在进程和线程之间共享游戏映射,以便在其上执行并行操作.这在节点中是不可能的,所以我决定在CL(SBCL + Linux)中编写多余的部分并通过unix域套接字连接到它.

计划是:

[players] <-> (node.js front server) <-> (SBCL performing game ticks)
Run Code Online (Sandbox Code Playgroud)

关键是,我需要在类似于socket.io的事情中在node.js和SBCL之间传递快速消息.


这是什么不起作用(你可以跳过这部分)

在节点方面,我不能使用普通的socket.io,因为它不支持Unix域套接字,但是net模块确实如此,所以我至少可以做socket.write('raw data')- 现在好于什么.

在CL方面,我试图运行woo web服务器(它支持本地套接字),我可以从节点连接到它并传递原始数据,但是涉及所有不必要的HTTP部分,而且woo总是作为服务器运行; 它在等待GET / HTTP/1.1 .....我没有找到一种方法来首先从woo实际发起消息.此外,它完全没有文档和未注释,并涉及到很多对C库的FF调用,我对此并不熟悉.

所以我经历了几个没有编译的CL网络服务器,不支持unix套接字,被放弃或未记录,最终转移到普通的sb-bsd-socket,最后转移到iolib,但我仍然无法弄明白.


iolib看起来很有前途,但我无法从节点连接到它.

我有这个:

(with-open-socket (socket :address-family :local
                          :type :datagram
                          ;; :connect  :passive
                          :local-filename "/tmp/socket")

  (format t "Socket created")
  ;; (listen-on socket)
  ;; (bind-address socket (make-address "/tmp/socket"))
  (loop
     (let ((msg (receive-from socket :size 20)))
       (format t msg))))    
Run Code Online (Sandbox Code Playgroud)

而且我正在

#<Syscall "recvfrom" signalled error EWOULDBLOCK(11) "Resource temporarily unavailable" FD=6>
   [Condition of type …
Run Code Online (Sandbox Code Playgroud)

events common-lisp unix-socket node.js

6
推荐指数
2
解决办法
389
查看次数

在迭代它时,ArrayObject不允许我取消设置值

我收到了这个通知:

ArrayIterator :: next():数组在对象外被修改,内部位置在/ var/www中不再有效...

这是由foreach循环开始时由此代码生成的.与通知一起,foreach循环开始重复迭代.换句话说,只要发生这种情况,就会重置内部位置.但根据php手册,ArrayObject默认使用ArrayIterator.

手册说这是关于ArrayIterator的

这个迭代器允许在迭代Arrays和Objects时取消设置和修改值和键.

我在这里错过了什么吗?我发现了一些关于ArratIterator的bug报告,但不是这种.这是一个错误还是我的坏?

版本:PHP版本5.3.10-1ubuntu3.4

<?php
//file 1:
// no namespace
abstract class holder extends \ArrayObject{
    // abstract function init();

    public function __construct($init){
        parent::__construct($init, 1);
    }
}?>

<?php
//file 2:
namespace troops;
class holder extends \holder{
    public function __construct(){
        parent::__construct($this->init());
    }

    private function init(){
        return array( /*... some data from db ...*/ );
    }

    public function saveData(){
        foreach($this as $k  => $v){
            $this->save($v);
            if($v->number_of_items==0) {
                unset($k);
                // $this->offsetUnset($k); // tryed both 
            }
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

php spl arrayobject

4
推荐指数
1
解决办法
3007
查看次数

使用"global-namespace";

我只是想知道是否有一种方法可以使类使用"use"关键字在全局命名空间中运行,因此该类只能从类外部表现为命名空间类.就像是:

namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
Run Code Online (Sandbox Code Playgroud)

任何人?

php namespaces

4
推荐指数
1
解决办法
8825
查看次数

在PHPMailer中使用变量的内容作为附件

我想做这个:

$mail = new PHPMailer;
$mail->AddAttachment('text in file', 'file.txt');
Run Code Online (Sandbox Code Playgroud)

所以附件可以有动态内容.我现在只能使用真实文件作为附件.显然,真实文件是静态的,我想动态生成一些内容并将其附加到邮件中.必须有一些方法来做到这一点,我想这不是那个模糊的功能.有人知道怎么样?

php phpmailer

4
推荐指数
1
解决办法
2457
查看次数

在heredoc中写入文字括号后跟变量

        $js = <<<EOS
        var data = {$jsObjectData};
EOS;
Run Code Online (Sandbox Code Playgroud)

结果是 var data = ~some object data~

逃脱支具:

        $js = <<<EOS
        var data = \{$jsObjectData};
EOS;
Run Code Online (Sandbox Code Playgroud)

结果是 var data = \{~some object data~}

我无法理解为什么反斜杠会通过它泄漏.

期望的输出: var data = {~some object data~}

php heredoc

2
推荐指数
1
解决办法
798
查看次数