问题列表 - 第33681页

使用SplObjectStorage序列化对象树时出错

我使用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模式,那么所有运行也都可以.

我做错了什么?

php spl serialization composite segmentation-fault

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

我想在日期范围内计算星期六和星期日

我想计算一个日期范围内的周六和周日?我怎么能够 ?

java calendar date

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

我可以将Google Streeview API与我自己的图片一起使用吗?

标题几乎说明了一切.我想对不在谷歌地图上的区域使用streeview,那么我可以添加自己的道路然后为街景添加我自己的全景图像吗?

这也是供个人使用,显然我不是要求修改谷歌实际地图.

我也乐意使用替代streeview,只要它做同样的事情.

google-maps google-maps-api-3 google-street-view

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

在F#中实现幻像类型

Ocaml程序员可以使用所谓的"幻像类型"来使用类型系统强制执行某些约束.一个很好的例子可以在http://ocaml.janestreet.com/?q=node/11找到.

语法type readonly在F#中不起作用.它可以被定义为伪幻像类型type readonly = ReadOnlyDummyValue,以便在上述博客文章中实现技巧.

有没有更好的方法来定义F#中的幻像类型?

f#

7
推荐指数
1
解决办法
1832
查看次数

Zend Form中的div元素

我正在使用Zend Form创建一个表单.我有8个输入元素.我希望将前6个元素放在一个div中,而将其他元素放在第二个div中.我怎么能这样做?我试图使用addDisplayGroup(),但它没有成功.

或者您可能知道如何在表单中创建链接?

php forms zend-framework decorator zend-form

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

mysqldump并使用特殊字符进行恢复.øæåØÆÅ

本地我这样做是为了转储和移动数据库,将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.我得到了疯狂的√Π租船人而不是øæåØÆå.

谁知道我哪里出错了?

mysql mysqldump silverstripe

15
推荐指数
6
解决办法
3万
查看次数

.NET与BinaryFormatter的向后兼容性

我们在C#游戏中使用BinaryFormatter来保存用户游戏进度,游戏关卡等.我们遇到了向后兼容性的问题.

目的:

  • 关卡设计师会创建广告系列(级别和规则),我们会更改代码,广告系列应该仍能正常运行.这可以在发布之前的每个开发期间发生.
  • 用户保存游戏,我们发布游戏补丁,用户应该仍然可以加载游戏
  • 无论两个版本有多远,无形数据转换过程都应该有效.例如,用户可以跳过我们的前5个小更新并直接获得第6个.尽管如此,他保存的游戏仍然可以正常运行.

解决方案需要对用户和关卡设计人员完全不可见,并且最低限度地要求更改某些内容的编码人员(例如,因为他们想要更好的名称而重命名字段).

我们序列化的一些对象图根植于一个类,一些在其他类中.不需要向前兼容性.

可能会发生变化(当我们序列化旧版本并反序列化为新版本时会发生什么):

  • 添加字段(获取默认初始化)
  • 更改字段类型(失败)
  • 重命名字段(相当于删除它并添加一个新字段)
  • 将属性更改为字段和返回(相当于重命名)
  • 更改自动实现的属性以使用支持字段(相当于重命名)
  • 添加超类(相当于将其字段添加到当前类)
  • 以不同的方式解释一个字段(例如,以度为单位,现在以弧度表示)
  • 对于实现ISerializable的类型,我们可以改变ISerializable方法的实现(例如,对于某些非常大的类型,在ISerializable实现中开始使用压缩)
  • 重命名一个类,重命名一个枚举值

我读过:

我目前的解决方案:

  • 我们通过使用像OnDeserializing回调之类的东西,尽可能多地进行更改.
  • 我们每两周安排一次重大更改,因此保留的兼容性代码较少.
  • 每次我们进行重大更改之前,我们会将我们使用的所有 [Serializable]类复制到名为OldClassVersions.VersionX的名称空间/文件夹中(其中X是最后一个之后的下一个序号).即使我们不打算很快发布,我们也会这样做.
  • 在写入文件时,我们序列化的是这个类的一个实例:class SaveFileData {int version; 对象数据; }
  • 从文件中读取时,我们反序列化SaveFileData并将其传递给迭代的"更新"例程,该例程执行如下操作:

.

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)
  • 为方便起见,Update()函数在其实现中可以使用CopyOverlappingPart()函数,该函数使用反射将尽可能多的数据从旧版本复制到新版本.这样,Update()函数只能处理实际更改的内容.

有些问题:

  • 反序列化器反序列化为类Foo而不是类OldClassVersions.Version5.Foo - 因为类Foo是序列化的.
  • 几乎不可能测试或调试
  • 需要保留很多类的旧副本,这容易出错,易碎且烦人
  • 当我们想要重命名一个类时,我不知道该怎么做

这应该是一个非常普遍的问题.人们通常如何解决它?

.net backwards-compatibility binaryformatter

9
推荐指数
1
解决办法
3821
查看次数

生成全周期/全周期随机数或排列类似于LCG但没有奇数/偶数

我希望生成一个伪随机数/置换,它在一个范围内"占据"一个完整的周期或整个周期.通常,"线性同余发生器"(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将交替奇数/偶数.

问题:

  1. 有没有人知道如何创造类似的东西,不会交替奇/偶?

  2. 我相信可以建立'复合LCG',但我没有细节.有人可以举一个这个CLCG的例子吗?

  3. 是否有替代公式可能符合上述细节和下面的约束?

约束:

  1. 我想要一些基于种子的简单公式.即:为了获得下一个数字,我提供种子并获得置换序列中的下一个"随机数".具体来说,我不能使用预先计算的数组.(见下一点)
  2. 序列绝对必须是'全周期/完整周期'
  3. 范围R可能是几百万甚至32比特/ 40亿.
  4. 计算不应该溢出并且有效/快速,即:没有大的指数或几十个乘法/除法.

  5. 序列不一定非常随机或安全 - 我不需要加密随机性(但如果可行则可以使用它),只需要"好"随机性或明显随机性,没有奇数/偶数序列.

任何想法都赞赏 - 提前感谢.

更新:理想情况下,Range变量可能不是2的精确幂,但在任何一种情况下都应该有效.

random algorithm numerical-methods

8
推荐指数
2
解决办法
4709
查看次数

如何在JavaScript循环中添加延迟?

我想在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'),依此类推.

javascript sleep loops

313
推荐指数
13
解决办法
40万
查看次数

EXC_BAD_ACCESS 在设备上,但在模拟器上正常

我有一个滚动视图应用程序,它在模拟器上运行良好,但是,当安装在设备上时,当我尝试滚动一页时,它会给我一个 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

谢谢

iphone crash exc-bad-access iphone-sdk-3.0 ios-simulator

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