是否有充分的理由说明为什么在函数中只有一个return语句是更好的做法?
或者,一旦逻辑正确就可以从函数返回,这意味着函数中可能有很多返回语句?
我在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) 我收到了这个通知:
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) 我只是想知道是否有一种方法可以使类使用"use"关键字在全局命名空间中运行,因此该类只能从类外部表现为命名空间类.就像是:
namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}
Run Code Online (Sandbox Code Playgroud)
任何人?
我想做这个:
$mail = new PHPMailer;
$mail->AddAttachment('text in file', 'file.txt');
Run Code Online (Sandbox Code Playgroud)
所以附件可以有动态内容.我现在只能使用真实文件作为附件.显然,真实文件是静态的,我想动态生成一些内容并将其附加到邮件中.必须有一些方法来做到这一点,我想这不是那个模糊的功能.有人知道怎么样?
$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 ×4
arrayobject ×1
coding-style ×1
common-lisp ×1
events ×1
heredoc ×1
namespaces ×1
node.js ×1
phpmailer ×1
spl ×1
unix-socket ×1