WeakMapECMAScript 6中引入的数据结构的实际用途是什么?
由于弱映射的键会创建对其相应值的强引用,因此只要其键仍处于活动状态,确保插入到弱映射中的值永远不会消失,它不能用于备注表,缓存或您通常使用弱引用的任何其他内容,具有弱值的映射等.
在我看来,这个:
weakmap.set(key, value);
Run Code Online (Sandbox Code Playgroud)
......这只是一种迂回的说法:
key.value = value;
Run Code Online (Sandbox Code Playgroud)
我错过了哪些具体的用例?
是否有一种相当快速的方法从Javascript中的数字中提取指数和尾数?
AFAIK有没有办法在后面的Javascript一个号码,这使得它在我看来位拿到我正在寻找一个因子分解问题:找到m并n使得2^n * m = k对于给定的k.由于整数分解是在NP中,我只能假设这将是一个相当难的问题.
我正在实现一个用于生成Javascript的GHC插件,需要实现decodeFloat_Int#和decodeDouble_2Int# 原始操作 ; 我想我可以重写使用该操作的基本库的部分来做他们正在以其他方式进行的操作(这不应该太难,因为所有数字类型都有数字作为他们的表示,但它'如果我不需要,那就好了.
有没有办法以一种甚至是高效的方式,通过一些黑暗的Javascript伏都教,聪明的数学或其他方式来做到这一点,或者我应该只是扣下来并拥有基础库?
编辑 根据ruakh和Louis Wasserman的出色答案,我提出了以下实现,这似乎运作得很好:
function getNumberParts(x) {
if(isNaN(x)) {
return {mantissa: -6755399441055744, exponent: 972};
}
var sig = x > 0 ? 1 : -1;
if(!isFinite(x)) {
return {mantissa: sig * 4503599627370496, exponent: 972};
}
x = Math.abs(x);
var exp = Math.floor(Math.log(x)*Math.LOG2E)-52;
var man = x/Math.pow(2, exp);
return {mantissa: sig*man, exponent: exp};
}
Run Code Online (Sandbox Code Playgroud) 在我的一个软件包中,我最近添加了一个过于严格的依赖版本约束来解决该特定版本软件包中的错误.但是,随着其他软件包的新版本的发布,这会导致我的一些用户出现依赖性冲突.其中一个人有用地建议zip-archive == 0.2用一些东西来取代当前的,过于严格的约束(zip-archive <= 0.2.3 && binary >= 0.5) || (zip-archive >= 0.2.3.1 && binary >= 0.7)- 也就是说,取决于A或B,我们并不关心哪一个.
有没有办法在Cabal表达这个?
我是一家小型金融公司项目的测试员.虽然管理层有时会做出"有趣"的决定,但我正在与之合作的团队似乎足够胜任.由于我通常是开发人员的一部分(这个项目是临时工作),我对项目的代码感兴趣.今天我评论说代码似乎很容易评论(这并不夸张;没有任何代码),并立即被告知这是故意的,"源代码注释是你在大型代码库中最大的敌人".
被聘为低级测试人员并且没有任何开发大型企业系统的实际经验,我认为这种观点并不合适,但我仍然想知道这是否真的是一个普遍接受的事实?
当然,代码应在一个清晰,不言自明的方式尽可能地书写,减少或无需评论个别代码段,但这个项目有意似乎不使用任何意见可言,甚至没有xmlDoc中评论方法和/或类,这对我来说似乎是非常错误的.这是否真的被普遍认同为大型项目的最佳实践?
我正在使用GHC作为库编写Haskell到Javascript代码生成器.由于Javascript没有整数类型,并且其Number类型只能正确表示高达2⁵3的整数,我将整数表示为数字,明确地执行所有算术模2¾.这对于32位GHC非常有效,但对于64位版本则更差.
GHC很乐意将Int64值强制转换为Ints,并将Int常量解释为64位值(例如,0xffffffff变为4294967295而不是-1),这会导致各种恼人的问题.
即使在64位系统上,编译器也能很好地处理"普通"Web内容,前提是标准库是在32位机器上构建的,但"请不要使用大数字,好吗?" 不是你想在编译器手册中看到的东西.一些问题(但不是全部)可以通过使用-O0进行编译来缓解,但是(不出所料)产生的代码不仅速度慢,而且太大.
所以,我需要阻止GHC假设Int和Int64是等价的.这甚至可能吗?
有没有办法写一个函数f :: (a -> b -> ... -> t) -> (Monad m => m a -> m b -> ... -> m t),基本上是liftMn为了任何一个n?
(编辑:修复荒谬的例子.)
我正在写一个FRP库,并认为如果我的代码含糊不清,它会很整洁:
main = do
input1 <- signalFromTextBoxTheUserMayTypeANumberInto
input2 <- signalFromAnotherTextBox
divided <- signal div input1 input2
signal (\x -> showTextAlert ("input1 `div` input2 is " ++ show x)) divided
Run Code Online (Sandbox Code Playgroud)
我一直在摆弄类型系列以使它工作,但我开始认为它实际上是不可行的.我现在正在做这样的事情:
type Action a = IORef a -> IO ()
type Listener = IO ()
newtype Signal a = Signal (IORef …Run Code Online (Sandbox Code Playgroud) haskell ×4
ghc ×2
javascript ×2
.net ×1
cabal ×1
coding-style ×1
comments ×1
ecmascript-6 ×1
ieee-754 ×1
math ×1
monads ×1
types ×1
weakmap ×1