标签: livescript

功能javascript?

我想使用"javascript派生语言"来学习和使用今天的一些常用Web技术,如node.js,jquery等.

在用功能概念和语言(主要是F#)玩弄一段时间后,我在寻找Javascript世界中是否有类似的东西.到目前为止,我发现并考虑的是:

  • Javascript的功能方式:尽可能广泛地使用javascript的功能部分,使用Underscore或其他功能库.这种方法的优点是学习"母语".对我来说,缺点是我真的不喜欢它的语法,并且在Javascript中编写"功能优先"的感觉并不自然.
  • CoffeeScript + Underscore:我看过一些使用CoffeScript + Underscore的例子看起来很吸引人.例如:http
    ://autotelicum.github.com/Smooth-CoffeeScript/SmoothCoffeeScript.html#toc-第7章这方面的优点是CoffeScript正在疯狂传播,似乎是为其使用而设计的语言的事实标准javascript VM.它的语法对我来说更自然,我可以用更简单的方式编写一些功能方式.
    缺点是远离javascript本身(这对我来说真的不是一个问题)并且处于非真正功能的中间地带.
  • Livescript:源自Coco(它本身来自CoffeScript),它对我来说具有更吸引人的语法(它甚至还有来自F#的我心爱的管道'|>'运算符).专业人士认为它是最具功能性的方法.缺点是它没有很大的传播(我在SO中进行搜索,并且真的没有关于它)和所有这些暗示(没有太多的社区,支持,教程等).

在考虑了所有这些之后,我没有真正的结论,所以如果人们习惯使用javascript,CoffeeScript等可以指导我关注这个问题的真正重要性,那就太棒了.

以防万一......我还没有真正考虑使用Pit(因此继续使用F#),因为虽然它编译为javascript,但我认为它没有与上面的任何javascript库集成,并且不遵循相同的工作流程或与javascript生态系统以及列出的选项集成.

非常感谢!

javascript functional-programming coffeescript livescript

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

为什么LiveScript对未定义的值使用'void 8'?

我已经使用LiveScript很长一段时间了,我注意到在undefined隐式返回的情况下,使用表达式void 8代替.

当然,我理解使用void,但我无法弄清楚为什么特别使用整数8.

例如,以下LiveScript:

x = if truthy then \success!
Run Code Online (Sandbox Code Playgroud)

将编译为:

var x;
x = truthy ? 'success!' : void 8;
Run Code Online (Sandbox Code Playgroud)

javascript void livescript

10
推荐指数
1
解决办法
638
查看次数

如何在没有抗锯齿的情况下调整画布大小?

更新

这肯定与我如何重新缩放画布有关.如果我将相同的场景绘制到画布上并且我不改变它的宽度和高度以填充屏幕,它可以完美地工作.

工作

为全屏环境调整画布大小的正确方法是什么?


我正在编写一个用于画布的游戏引擎,并且我遇到了图像被放大和混淆的问题,我通过几个答案为有类似问题的人阅读.我修改了我的代码,以便在我的每个画布上启用以下设置.

context.webkitImageSmoothingEnabled = false;                                                                                
context.mozImageSmoothingEnabled = false;                                                                                   
context.imageSmoothingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

为了确保,我还包括了这些规则的CSS替代方案.

canvas {
  image-rendering: optimizeSpeed;             // Older versions of FF
  image-rendering: -moz-crisp-edges;          // FF 6.0+
  image-rendering: -webkit-optimize-contrast; // Webkit (non standard naming)
  image-rendering: -o-crisp-edges;            // OS X & Windows Opera (12.02+)
  image-rendering: crisp-edges;               // Possible future browsers.
  -ms-interpolation-mode: nearest-neighbor;   // IE (non standard naming)
}
Run Code Online (Sandbox Code Playgroud)

这是我试图绘制的原始图像之一的示例.

字符

然后我从16x16升级到64x64,而不是看起来像使用最近邻插值,它呈现这样.

实际结果

我在Chrome和Firefox中获得了相同的结果.我也不想做一个预处理步骤来升级图像.它必须是可能的,因为这个演示对我有用.

另外要提的是,引擎设计用于全屏,所以我手动保持画布的大小与此功能.

fill-screen = (canvas) ->
  canvas.width = document.body.clientWidth
  canvas.height = document.body.clientHeight
Run Code Online (Sandbox Code Playgroud)

画布绝对位于其父级的左上角,除此之外,没有非浏览器CSS规则对它们进行操作.

也许我正在做一些愚蠢的事情,但我已经看了好几年了,而且我已经没有接近了.我正在创建画布和上下文的文件的代码在这里:https://gist.github.com/code-curve/9273248

javascript css html5 canvas livescript

6
推荐指数
1
解决办法
1321
查看次数

如何在LiveScript中包含另一个LiveScript文件?

如何在另一个LS文件的LiveScript文件中使用代码?例如:

# In script-one.ls
foo = 5

# In script-two.ls
bar = -> foo + 3
Run Code Online (Sandbox Code Playgroud)

简单地通过script标签在HTML中包含这两个文件似乎不起作用.在第二个脚本中将第一个脚本更改为export foo = 5和使用require! './script-one'(或变体)也不起作用.

那循环依赖呢?

livescript

6
推荐指数
1
解决办法
172
查看次数

什么是这个循环的功能型替代品?

nums = [2 5 3 7]
result = []
result.push {x:nums[0]}
for n in nums.slice(1)
    result.push {n:n + result[-1].x}
log result
# [{x:2} {x:7} {x:10} {x:17}]
Run Code Online (Sandbox Code Playgroud)

使用该函数很难在功能上表达,map因为每个元素都依赖于前一个元素.这个算法的正确功能解决方案是什么?

javascript functional-programming coffeescript livescript

4
推荐指数
2
解决办法
486
查看次数

将CoffeeScript代码转换为LiveScript?

我有这个有效的CoffeeScript,并希望将其转换为LiveScript.有人可以解释为什么它无法转换?还要转换一个吗?

TodoCtrl = (scope) ->
  scope.addTodo = ->
    scope.todos.push
      text: scope.todoText
      done: false
    scope.todoText = ''
Run Code Online (Sandbox Code Playgroud)

您可以使用它来编译CoffeeScript.

http://coffeescript.org/

您可以使用它来编译LiveScript.

http://gkz.github.com/LiveScript/

coffeescript livescript

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

LiveScript - 如果有多个回调,如何使用后退调用符?

例如:

$.get('/path/to/api').then(
  function(data) {
    alert( "$.get succeeded" );
  }, function(error) {
    alert( "$.get failed!" );
  }
);
Run Code Online (Sandbox Code Playgroud)

是否可以在两个回调中应用回调运算符?

javascript livescript

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

如何在生命文章中写一个闭包?

如何在lifecript中写一个闭包

for i from 1 to 10
  cb = -> console.log i
  set-timeout cb, i*1000
Run Code Online (Sandbox Code Playgroud)

获得1到10而不是10倍10?

closures livescript

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