小编Aad*_*hah的帖子

为什么Underscore.js有延迟功能?

这是Underscore.js delay函数的源代码:

_.delay = function (func, wait) {
    var args = slice.call(arguments, 2);
    return setTimeout(function () { return func.apply(null, args); }, wait);
};
Run Code Online (Sandbox Code Playgroud)

这有什么不同setTimeout?为什么Underscore.js需要delay

javascript settimeout underscore.js

16
推荐指数
3
解决办法
1万
查看次数

在JavaScript中定义属性和命名约定

我是一名优秀的JavaScript程序员,并且遵守道格拉斯·克罗克福德所征集的编码惯例.然而,JavaScript从那时起已经发展,我相信命名约定现在已经过时了.

例如Crockford说:

不要使用_(下划线)作为名称的第一个字符.它有时用于表示隐私,但实际上并不提供隐私.如果隐私很重要,请使用提供私人会员的表格.避免表现出缺乏能力的惯例.

但是,JavaScript现在允许您创建不可枚举的属性.因此,有意义的是(至少对我来说 - 你被允许不同意)使用下划线为非可枚举属性添加前缀以指示该属性是不可枚举的.

你为什么要这样做?

  1. 因为视觉反馈很重要(向下滚动到链接文章中的可读性部分).
  2. 向后兼容性.您可以过滤出以for in循环中的下划线开头的属性.

让我们再举一个Crockford所说的例子:

全局变量应该全部上限.(JavaScript没有宏或常量,因此使用全部大写来表示JavaScript没有的功能没有多大意义.)

正如我所看到的,以下约定存在两个问题:

  1. 大多数JavaScript程序员不会在全部大写中编写全局变量.这不自然.
  2. JavaScript现在允许您创建不可写属性.因此,对于这些属性使用全部大写是有意义的,其原因与我上面针对不可枚举的属性所述的相同.

一切都很好,但你问的真正问题是什么?看看这个Object.defineProperties功能.问题是您需要为要定义的每个属性提供属性描述符.这太冗长了.例如:

var o = {}, x = 0;

Object.defineProperties(o, {
    E: {
        value: Math.E,
        enumerable: true,
        configurable: true
    }
    x: {
        enumerable: true,
        configurable: true,
        get: function () {
            return x;
        },
        set: function (y) {
            x = y;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

相反,如果您只是这样做会更好:

var o = {}, x = 0;

define(o, …
Run Code Online (Sandbox Code Playgroud)

javascript coding-style naming-conventions

16
推荐指数
1
解决办法
1350
查看次数

在Haskell中你怎么能乘以一个字符串?

我正在尝试编写一个带a String和a的函数,Int并返回该字符串"int"次.那是:

duplicate :: String -> Int -> String
Run Code Online (Sandbox Code Playgroud)

如果我要写duplicate "Hello" 3输出应该是"HelloHelloHello".

haskell

16
推荐指数
3
解决办法
6402
查看次数

如何使用可扩展效果获得“单子转换器的不灵活语义”?

考虑以下示例。

newtype TooBig = TooBig Int deriving Show

choose :: MonadPlus m => [a] -> m a
choose = msum . map return

ex1 :: (MonadPlus m, MonadError TooBig m) => m Int
ex1 = do
    x <- choose [5,7,1]
    if x > 5
        then throwError (TooBig x)
        else return x

ex2 :: (MonadPlus m, MonadError TooBig m) => m Int
ex2 = ex1 `catchError` handler
  where
    handler (TooBig x) = if x > 7
        then throwError (TooBig x)
        else …
Run Code Online (Sandbox Code Playgroud)

monads haskell functional-programming monad-transformers free-monad

15
推荐指数
1
解决办法
167
查看次数

在JavaScript中实现monad

现在node.js支持ECMAScript Harmony生成器,我们可以do在Haskell中简洁地编写monadic代码:

function monad(unit, bind) {
    return function (f) {
        return function () {
            var g = f.apply(this, arguments);

            return typeOf(g) === "Generator" ? send() : unit(g);

            function send(value) {
                var result = g.next(value);
                if (result.done) return unit(result.value);
                else return bind(result.value, send);
            }
        };
    };
}

function typeOf(value) {
    return Object.prototype.toString.call(value).slice(8, -1);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中monad是一个函数,可用于创建确定性 monad,如:

var maybe = monad(function (a) {
    return {just: a};
}, function (m, f) {
    return m …
Run Code Online (Sandbox Code Playgroud)

javascript monads generator node.js ecmascript-harmony

14
推荐指数
2
解决办法
2334
查看次数

功能语言中的部分评估和函数内联之间有什么区别?

我知道:

  1. 函数内联是用函数定义替换函数调用.
  2. 部分评估是在编译时评估程序的已知(静态)部分.

在命令式语言(如C)中,两者之间存在区别,其中运算符与函数不同.但是,在Haskell这样的函数式语言中,两者之间是否存在差异?运算符也是函数?

两者之间的唯一区别是功能内联可以在程序的选择部分上执行,而部分评估是在整个程序上执行的(即?vs ?)?

两种优化技术之间的语义差异是什么?

optimization haskell functional-programming inlining compiler-optimization

14
推荐指数
1
解决办法
1494
查看次数

如何使用PyYAML读取python元组?

我有以下YAML文件命名input.yaml:

cities:
  1: [0,0]
  2: [4,0]
  3: [0,4]
  4: [4,4]
  5: [2,2]
  6: [6,2]
highways:
  - [1,2]
  - [1,3]
  - [1,5]
  - [2,4]
  - [3,4]
  - [5,4]
start: 1
end: 4
Run Code Online (Sandbox Code Playgroud)

我正在使用PyYAML加载它并打印结果如下:

import yaml

f = open("input.yaml", "r")
data = yaml.load(f)
f.close()

print(data)
Run Code Online (Sandbox Code Playgroud)

结果是以下数据结构:

{ 'cities': { 1: [0, 0]
            , 2: [4, 0]
            , 3: [0, 4]
            , 4: [4, 4]
            , 5: [2, 2]
            , 6: [6, 2]
            }
, 'highways': [ [1, 2]
              , [1, …
Run Code Online (Sandbox Code Playgroud)

python yaml pyyaml

14
推荐指数
2
解决办法
1万
查看次数

为什么Haskell没有正确地对这些IO操作进行排序?

我的一个朋友问我为什么要学习Haskell.为了演示Haskell的强大功能,我编写了一个小程序,显示了一个素数列表:

main = do
    putStr "Enter the number of prime numbers to display: "
    number <- fmap read getLine :: IO Int
    print . take number . filter isPrime $ [2..]

isPrime :: Integer -> Bool
isPrime n = not . any ((== 0) . mod n) $ [2..floor . sqrt . fromInteger $ n]
Run Code Online (Sandbox Code Playgroud)

该程序按预期工作,除了轻微的异常.它从用户获取输入数字后打印提示消息,产生如下输出:

12
Enter the number of prime numbers to display: [2,3,5,7,11,13,17,19,23,29,31,37]
Run Code Online (Sandbox Code Playgroud)

为什么Haskell没有正确排序IO操作?我哪里错了?

haskell

13
推荐指数
2
解决办法
674
查看次数

如何在WebRTC对等连接中创建数据通道?

我正在尝试学习如何创建一个RTCPeerConnection以便我可以使用DataChannelAPI.以下是我从我所理解的内容中尝试过的内容:

var client = new mozRTCPeerConnection;
var server = new mozRTCPeerConnection;

client.createOffer(function (description) {
    client.setLocalDescription(description);
    server.setRemoteDescription(description);

    server.createAnswer(function (description) {
        server.setLocalDescription(description);
        client.setRemoteDescription(description);

        var clientChannel = client.createDataChannel("chat");
        var serverChannel = server.createDataChannel("chat");

        clientChannel.onmessage = serverChannel.onmessage = onmessage;

        clientChannel.send("Hello Server!");
        serverChannel.send("Hello Client!");

        function onmessage(event) {
            alert(event.data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我不确定出了什么问题,但我假设连接从未建立,因为没有显示任何消息.

我在哪里可以了解更多相关信息?我已经阅读了WebRTC入门 - HTML5 Rocks教程.

javascript webrtc

12
推荐指数
1
解决办法
2万
查看次数

Haskell镜头:如何通过遍历使视图很好地播放?

我试图通过在Haskell中实现它来了解镜头.我已经实现了view如下组合器:

{-# LANGUAGE RankNTypes #-}

import Control.Applicative
import Data.Traversable

type Lens s a = Functor f => (a -> f a) -> s -> f s

view :: Lens s a -> s -> a
view lens = getConst . lens Const
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试与它一起使用时,traverse我收到以下错误消息:

Prelude> :load Lens.hs
[1 of 1] Compiling Main             ( Lens.hs, interpreted )
Ok, modules loaded: Main.
*Main> :t view traverse

<interactive>:1:6:
    Could not deduce (Applicative f) arising from a use of ‘traverse’
    from …
Run Code Online (Sandbox Code Playgroud)

haskell lenses traversable

12
推荐指数
1
解决办法
848
查看次数