Tag: php

设置默认值(条件分配)

在Ruby中,您可以轻松地为变量设置默认值 x ||= “default” 如果x为nil或false,则上述语句将x的值设置为“default” 在PHP中是否有类似的快捷方式,或者我必须使用更长的forms: $x = (isset($x))? $x : “default”; 有没有更简单的方法来处理这个PHP?

为什么浮点数打印得如此不同?

众所周知,(大多数)浮点数不能精确存储(使用IEEE-754格式时)。 所以不应该这样做: 0.3 – 0.2 === 0.1; // very wrong …因为它会导致false ,除非使用了一些特定的任意精度类型/类( Java / Ruby中的 BigDecimal,PHP中的BCMath ,Perl中的Math :: BigInt / Math :: BigFloat ,仅举几例) 。 但我想知道为什么当一个人尝试打印这个表达式的结果时, 0.3 – 0.2 ,脚本语言( Perl和PHP )给出0.1 ,但“虚拟机”( Java , JavaScript和Erlang )给出的更类似于0.09999999999999998 ? 为什么它在Ruby中也不一致? 版本1.8.6( codepad)给出0.1 , 版本1.9.3(ideone)给出0.0999…

是否可以在Ruby中自动初始化多维哈希数组,就像在PHP中一样?

我习惯于在PHP中使用多维数组,在那里我可以分配和初始化哈希 unset($a); // just to show that there is no variable $a $a[‘settings’][‘system’][‘memory’] = ‘1 Gb’; $a[‘settings’][‘system’][‘disk space’] = ‘100 Gb’; 有没有办法在Ruby中做类似的事情? 或者我需要先初始化所有维度,然后分配值。 是否可以定义一个高级Hash,它可以满足我的需求? 你会怎么做? 更新 除了道格拉斯提出的解决方案(见下文)之外,我还找到了一个主题 ,其中BrianSchröäer提出了Hash类的扩展: class AutoHash self, :update_key => k) end end def []=(k, v) @update[@update_index] = self if @update and @update_index super end end 当仅在请求项目值时,例如a[‘key’] ,当允许不期望地创建丢失的散列项时,它允许解决该问题。 一些额外的参考 ruby hash autovivification(facets) […]

如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好

我正在生成要从Ruby堆栈发送到PHP堆栈的数据。 我在Ruby端使用OpenSSL :: Cipher库,在PHP使用’mcrypt’库。 当我在Ruby中使用’aes-256-cbc’(256位块大小)进行加密时,我需要在PHP中使用MCRYPT_RIJNDAEL_128(128位块大小)来解密它。 我怀疑Ruby代码被破坏了,因为cipher.iv_len是16; 我相信它应该是32: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-128-cbc’) => # >> cipher.key_len => 16 >> cipher.iv_len => 16 >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) => # >> cipher.key_len => 32 >> cipher.iv_len => 16 所以这是我的考试。 在Ruby方面,首先我生成密钥和iv: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) >> cipher.encrypt >> iv = cipher.random_iv >> iv64 = [iv].pack(“m”).strip => “vCkaypm5tPmtP3TF7aWrug==” >> key […]