我知道漂浮物由于其不精确的性质而导致范围内的奇怪行为.我预计价值不精确的可能性.例如:
[0.1,0.3..1]可能[0.1,0.3,0.5,0.7,0.8999999999999999]代替[0.1,0.3,0.5,0.7,0.9]
然而,除了精度损失之外,我还得到一个额外的元素:
ghci> [0.1,0.3..1]
[0.1,0.3,0.5,0.7,0.8999999999999999,1.0999999999999999]
Run Code Online (Sandbox Code Playgroud)
这很奇怪,但在这里解释.我想这样可以解决这个问题,我想:
ghci> [0.1,0.3..0.99]
[0.1,0.3,0.5,0.7,0.8999999999999999]
Run Code Online (Sandbox Code Playgroud)
但这有点糟糕.也许有一种更清洁的方式.对于这个简单的例子,当然,我可以使用范围[0.1,0.3..0.9],一切都很好.
但是在一个更复杂的例子中,我可能不会很快知道(或者想弄清楚,如果我是懒惰的)我应该使用的确切上限.那么,我只需要制作一系列整数然后除以10,对吧?不:
ghci> map (/10) [1,3..10]
[0.1,0.3,0.5,0.7,0.9,1.1]
Run Code Online (Sandbox Code Playgroud)
任何浮点函数似乎都会导致此行为:
ghci> map (*1.0) [1,3..10]
[1.0,3.0,5.0,7.0,9.0,11.0]
Run Code Online (Sandbox Code Playgroud)
而非浮动函数则不:
ghci> map (*1) [1,3..10]
[1,3,5,7,9]
Run Code Online (Sandbox Code Playgroud)
虽然看起来不太可能,但我认为可能还有一些懒惰的评估在起作用,并试图首先强制评估范围:
ghci> let list = [1,3..10] in seq list (map (*1.0) list)
[1.0,3.0,5.0,7.0,9.0,11.0]
Run Code Online (Sandbox Code Playgroud)
显然,使用文字列表而不是范围工作正常:
ghci> map (*1.0) [1,3,5,7,9]
[1.0,3.0,5.0,7.0,9.0]
ghci> let list = [1,3,5,7,9] in seq list (map (*1.0) list)
[1.0,3.0,5.0,7.0,9.0]
Run Code Online (Sandbox Code Playgroud)
它不只是映射:
ghci> last [1,3..10]
9
ghci> 1.0 * (last [1,3..10])
11.0
Run Code Online (Sandbox Code Playgroud)
如何将函数应用于范围的结果会影响该范围的实际评估结果?
在我的数据库中,我有两个表,制造商和塑料:
CREATE TABLE `manufacturer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8
CREATE TABLE `plastic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL DEFAULT '',
`manufacturer_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`,`manufacturer_id`),
KEY `manufacturer_id` (`manufacturer_id`),
CONSTRAINT `plastic_ibfk_1` FOREIGN KEY (`manufacturer_id`) REFERENCES `manufacturer` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,塑料具有Yii称之为与制造商的BELONGS_TO关系 - 一个制造商可以制造几种不同的塑料.
我试图通过默认塑料管理页面中的制造商名称进行搜索,但搜索字段不会显示在"制造商"列中.我遵循了这个指南,我想我差不多了,但是我被困在一个小细节上.
在我的Plastic模型类中,根据上面的链接,我有:
class Plastic extends CActiveRecord
{
public $manufacturer_search; …Run Code Online (Sandbox Code Playgroud)