这是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程序员,并且遵守道格拉斯·克罗克福德所征集的编码惯例.然而,JavaScript从那时起已经发展,我相信命名约定现在已经过时了.
例如Crockford说:
不要使用
_(下划线)作为名称的第一个字符.它有时用于表示隐私,但实际上并不提供隐私.如果隐私很重要,请使用提供私人会员的表格.避免表现出缺乏能力的惯例.
但是,JavaScript现在允许您创建不可枚举的属性.因此,有意义的是(至少对我来说 - 你被允许不同意)使用下划线为非可枚举属性添加前缀以指示该属性是不可枚举的.
你为什么要这样做?
for in循环中的下划线开头的属性.让我们再举一个Crockford所说的例子:
全局变量应该全部上限.(JavaScript没有宏或常量,因此使用全部大写来表示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) 我正在尝试编写一个带a String和a的函数,Int并返回该字符串"int"次.那是:
duplicate :: String -> Int -> String
Run Code Online (Sandbox Code Playgroud)
如果我要写duplicate "Hello" 3输出应该是"HelloHelloHello".
考虑以下示例。
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
现在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) 我知道:
在命令式语言(如C)中,两者之间存在区别,其中运算符与函数不同.但是,在Haskell这样的函数式语言中,两者之间是否存在差异?运算符也是函数?
两者之间的唯一区别是功能内联可以在程序的选择部分上执行,而部分评估是在整个程序上执行的(即?vs ?)?
两种优化技术之间的语义差异是什么?
optimization haskell functional-programming inlining compiler-optimization
我有以下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) 我的一个朋友问我为什么要学习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操作?我哪里错了?
我正在尝试学习如何创建一个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教程.
我试图通过在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 ×5
javascript ×4
monads ×2
coding-style ×1
free-monad ×1
generator ×1
inlining ×1
lenses ×1
node.js ×1
optimization ×1
python ×1
pyyaml ×1
settimeout ×1
traversable ×1
webrtc ×1
yaml ×1