我使用SplObjectStorage实现了一个简单的Composite模式,就像上面的例子一样:
class Node
{
private $parent = null;
public function setParent(Composite $parent)
{
$this->parent = $parent;
}
}
class Composite extends Node
{
private $children;
public function __construct()
{
$this->children = new SplObjectStorage;
}
public function add(Node $node)
{
$this->children->attach($node);
$node->setParent($this);
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试序列化一个Composite对象时,PHP 5.3.2就会抛出一个Segmentation Fault.只有在向对象添加任意类型的任意数量的节点时才会发生这种情况.
这是违规的代码:
$node = new Node;
$composite = new Composite;
$composite->add($node);
echo serialize($composite);
Run Code Online (Sandbox Code Playgroud)
虽然这个有效:
$node = new Node;
$composite = new Composite;
echo serialize($composite);
Run Code Online (Sandbox Code Playgroud)
另外,如果我使用array()而不是SplObjectStorage实现Composite模式,那么所有运行也都可以.
我做错了什么?
标题几乎说明了一切.我想对不在谷歌地图上的区域使用streeview,那么我可以添加自己的道路然后为街景添加我自己的全景图像吗?
这也是供个人使用,显然我不是要求修改谷歌实际地图.
我也乐意使用替代streeview,只要它做同样的事情.
Ocaml程序员可以使用所谓的"幻像类型"来使用类型系统强制执行某些约束.一个很好的例子可以在http://ocaml.janestreet.com/?q=node/11找到.
语法type readonly在F#中不起作用.它可以被定义为伪幻像类型type readonly = ReadOnlyDummyValue,以便在上述博客文章中实现技巧.
有没有更好的方法来定义F#中的幻像类型?
我正在使用Zend Form创建一个表单.我有8个输入元素.我希望将前6个元素放在一个div中,而将其他元素放在第二个div中.我怎么能这样做?我试图使用addDisplayGroup(),但它没有成功.
或者您可能知道如何在表单中创建链接?
本地我这样做是为了转储和移动数据库,将silverstripe 2.3升级到2.4:
mysqldump --opt --default-character-set=latin1 --skip-set-charset --user=$root -p$password $oldDatabase -r db.sql
iconv -f LATIN1 -t UTF8 db.sql > db_utf.sql
CREATE DATABASE $newDatabase CHARACTER SET utf8 COLLATE utf8_swedish_ci; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON $newDatabase . * TO '$newUser'@'localhost'; FLUSH PRIVILEGES;
SET NAMES utf8; SOURCE db_utf.sql;
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但在服务器Ubuntu 8.04上,使用mysql Ver 14.12 Distrib 5.0.51a.我得到了疯狂的√Π租船人而不是øæåØÆå.
谁知道我哪里出错了?
我们在C#游戏中使用BinaryFormatter来保存用户游戏进度,游戏关卡等.我们遇到了向后兼容性的问题.
目的:
解决方案需要对用户和关卡设计人员完全不可见,并且最低限度地要求更改某些内容的编码人员(例如,因为他们想要更好的名称而重命名字段).
我们序列化的一些对象图根植于一个类,一些在其他类中.不需要向前兼容性.
可能会发生变化(当我们序列化旧版本并反序列化为新版本时会发生什么):
我读过:
我目前的解决方案:
.
for(int i = loadedData.version; i < CurrentVersion; i++)
{
// Update() takes an instance of OldVersions.VersionX.TheClass
// and returns an instance of OldVersions.VersionXPlus1.TheClass
loadedData.data = Update(loadedData.data, i);
}
Run Code Online (Sandbox Code Playgroud)
有些问题:
这应该是一个非常普遍的问题.人们通常如何解决它?
我希望生成一个伪随机数/置换,它在一个范围内"占据"一个完整的周期或整个周期.通常,"线性同余发生器"(LCG)可用于生成此类序列,使用如下公式:
X = (a*Xs+c) Mod R
Run Code Online (Sandbox Code Playgroud)
其中Xs是种子,X是结果,a和c是相对的素数常数,R是最大值(范围).
(通过完整周期/完整周期,我的意思是可以选择常数,使得任何X在一些随机/置换序列中仅出现一次,并且将在0到R-1或1到R的范围内).
LCG几乎满足了我的所有需求.我对LCG的问题是奇数/偶数结果的非随机性,即:对于种子Xn,结果X将交替奇数/偶数.
问题:
有没有人知道如何创造类似的东西,不会交替奇/偶?
我相信可以建立'复合LCG',但我没有细节.有人可以举一个这个CLCG的例子吗?
是否有替代公式可能符合上述细节和下面的约束?
约束:
计算不应该溢出并且有效/快速,即:没有大的指数或几十个乘法/除法.
序列不一定非常随机或安全 - 我不需要加密随机性(但如果可行则可以使用它),只需要"好"随机性或明显随机性,没有奇数/偶数序列.
任何想法都赞赏 - 提前感谢.
更新:理想情况下,Range变量可能不是2的精确幂,但在任何一种情况下都应该有效.
我想在while循环中添加延迟/睡眠:
我试过这样的:
alert('hi');
for(var start = 1; start < 10; start++) {
setTimeout(function () {
alert('hello');
}, 3000);
}
Run Code Online (Sandbox Code Playgroud)
只有第一种情况是真的:显示后alert('hi'),它将等待3秒然后alert('hello')将显示,但随后alert('hello')将反复不断.
我想要的是,在alert('hello')3秒之后显示alert('hi')之后,它需要等待第二次3秒alert('hello'),依此类推.
我有一个滚动视图应用程序,它在模拟器上运行良好,但是,当安装在设备上时,当我尝试滚动一页时,它会给我一个 EXC_BAD_ACCESS 。我已经通过具有分配和泄漏的仪器运行了它,但没有任何泄漏,也没有发送僵尸消息......我只是好奇什么会导致模拟器与设备之间存在如此大的差异?由于我的符号化崩溃日志(下面部分),任何调试此问题的方法似乎都不是非常符号化。
异常类型:EXC_BAD_ACCESS (SIGBUS)
异常代码:KERN_PROTECTION_FAILURE 位于 0x0000000f
崩溃线程:0
线程0崩溃:
0 libobjc.A.dylib 0x0000286e objc_msgSend + 18
1 MyApp 0x00004fee 0x1000 + 16366
2 UIKit 0x000668f4 -[UIViewController 视图] + 104
3 MyApp 0x00009716 0x1000 + 3458
2 4 MyApp 0x0000960c 0x1000 + 34316
5 UIKit 0x0001426c -[UIScrollView setContentOffset: ] + 344
谢谢