标签: let

由于let和let*之间的差异而感到困惑

有人能简单解释一下这个区别吗 我不认为我理解我所咨询的教科书/网站的概念.

scheme let

25
推荐指数
2
解决办法
8431
查看次数

为什么在`for`循环中使用`let`在Chrome上这么慢?

主要更新.

考虑到Chrome主要版本尚未发布,Chrome Canary 59 的新型Ignition + Turbofan引擎已经解决了这个问题.测试显示相同的时间letvar声明的循环变量.


原始(现在是静音)问题.

当使用letforChrome上循环运行速度非常缓慢,相比于移动变量外刚内循环的范围.

for(let i = 0; i < 1e6; i ++); 
Run Code Online (Sandbox Code Playgroud)

需要两倍的时间

{ let i; for(i = 0; i < 1e6; i ++);}
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

Snippet演示了差异,只影响Chrome,只要我记得Chrome支持,就一直如此let.

var times = [0,0]; // hold total times
var count = 0;  // number of tests

function test(){
    var start = performance.now();
    for(let i = 0; i < 1e6; i += 1){};
    times[0] += performance.now()-start;
    setTimeout(test1,10) …
Run Code Online (Sandbox Code Playgroud)

javascript performance google-chrome let ecmascript-6

23
推荐指数
2
解决办法
2612
查看次数

Clojure在Scala中的'let'等价物

我经常遇到以下情况:假设我有这三个功能

def firstFn: Int = ...
def secondFn(b: Int): Long = ...
def thirdFn(x: Int, y: Long, z: Long): Long = ...
Run Code Online (Sandbox Code Playgroud)

我也有calculate功能.我的第一种方法可能如下所示:

def calculate(a: Long) = thirdFn(firstFn, secondFn(firstFn), secondFn(firstFn) + a)
Run Code Online (Sandbox Code Playgroud)

它看起来很漂亮,没有任何花括号 - 只有一个表达式.但它不是最佳的,所以我最终得到了这个代码:

def calculate(a: Long) = {
  val first = firstFn
  val second = secondFn(first)

  thirdFn(first, second, second + a)
}
Run Code Online (Sandbox Code Playgroud)

现在有几个用大括号括起来的表达式.在这样的时刻,我羡慕Clojure一点点.使用let函数我可以在一个表达式中定义此函数.

所以我的目标是calculate用一个表达式定义函数.我想出了两个解决方案.

1 - 使用scalaz我可以像这样定义它(有更好的方法用scalaz做到这一点吗?):

  def calculate(a: Long) = 
    firstFn |> {first => secondFn(first) |> {second => …
Run Code Online (Sandbox Code Playgroud)

scala clojure let scalaz

22
推荐指数
2
解决办法
3670
查看次数

有没有相当于Haskell'let'的Python

是否有一个类似于Haskell'let'表达式的Python,它可以让我写出如下内容:

list2 = [let (name,size)=lookup(productId) in (barcode(productId),metric(size)) 
            for productId in list]
Run Code Online (Sandbox Code Playgroud)

如果没有,最可读的替代方案是什么?

添加以澄清let语法:

x = let (name,size)=lookup(productId) in (barcode(productId),metric(size))
Run Code Online (Sandbox Code Playgroud)

相当于

(name,size) = lookup(productId)
x = (barcode(productId),metric(size))
Run Code Online (Sandbox Code Playgroud)

但是,第二个版本与列表推导不太相配.

python haskell functional-programming let

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

Clojure中的变量范围+ eval

在Clojure,

(def x 3)
(eval '(prn x))
Run Code Online (Sandbox Code Playgroud)

打印3,而

(let [y 3]
   (eval '(prn y)))
Run Code Online (Sandbox Code Playgroud)

(binding [z 3] (eval '(prn z)))
Run Code Online (Sandbox Code Playgroud)

生成'无法解析var'异常.

http://clojure.org/evaluation,eval,load-string,等生成临时命名空间来评估它们的内容.因此,我希望上述代码示例都不起作用,因为(def x 3)它是在我当前的命名空间中完成的,而不是由当前命名空间创建的eval.

  1. 为什么第一个代码示例工作而不是后两个?
  2. 如何eval使用绑定变量的表单而不使用def

谢谢!

binding eval clojure let

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

let块语句和带有语句的等效语句有什么区别?

已过时

let语句的块版本在最终确定之前从ES6中删除,并且已从支持它的浏览器中删除.这个问题现在只具有历史意义.

使用ECMAScript 6 let块语句和使用with具有等效对象文字的语句之间有什么区别吗?

使用let声明

var x = 10;
let (x = x * 10,
     y = x + 5) {
    console.log("x is " + x + ", y is " + y);
}
Run Code Online (Sandbox Code Playgroud)

使用with声明

var x = 10;
with ({x: x * 10,
       y: x + 5}) {
    console.log("x is " + x + ", y is " + y);
    // writes "x is 100, y is 15"
}
Run Code Online (Sandbox Code Playgroud)

javascript language-features let with-statement ecmascript-6

18
推荐指数
2
解决办法
1346
查看次数

JS全局"let"变量在功能上没有更新?

编辑:我已将此报告为Chromium错误:https://bugs.chromium.org/p/chromium/issues/detail? id = 668257

我在JS中用可以射击的敌人创建一个小帆布游戏.为了测试,我创建了一个全局声明的标志,let fancy = true;以确定是否使用"花式"定位算法.我这样按下P就会切换这个标志.我的主要功能,每秒frame调用另一个函数autoShoot,五次.autoShoot使用fancy旗帜.

今天,奇怪的事情开始发生了; 我不记得引入了什么变化.有时,当我按下P时,autoShoot表现得像fancy是没有被切换.我做了一些调试和发现新的触发值反映内frame,但autoShoot不更新的价值.它间歇性地发生,有时它的价值autoShoot会自行解决(没有我做过任何事情).

我把代码减少到了以下,这对我来说仍然存在问题.尝试多次按P.对我来说,两个值"不同步"并在按P一次或两次后显示不同:

在我的电脑上按P后的屏幕截图

(我在Windows 10上运行Chrome"Version 54.0.2840.99 m".)

const canvas = document.getElementById("c");
const width = 0;
const height = 0;
const ctx = canvas.getContext("2d");
const ratio =1;// (window.devicePixelyRatio||1)/(ctxFOOOOOOOOFOOOOOOOOOFOOOOO||1);
canvas.width = width*ratio;
canvas.height = height*ratio;
canvas.style.width = width+"px";
canvas.style.height = height+"px";
ctx.scale(ratio, ratio);

function testSet(id, val) {
  console.log(id+": …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome let requestanimationframe ecmascript-6

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

使用变量设置Vim选项

我有一个问题应该相当简单,但我还没有找到解决方案.我正在编辑我的.vimrc,并希望使用保存在变量中的结果设置一个选项.例如,我想在〜/ .vimetc中聚合我的所有临时文件.这就是我想做的事情,

let s:vimetc=$HOME.'/vimetc/'
set backupdir=s:vimetc.'backups/'
set directory=s:vimetc.'vimswap/'
set viewdir=s:vimetc.'vimswap/'
Run Code Online (Sandbox Code Playgroud)

当然,set不解析变量,所以我最终得到了文字| s:vimetc.'backups /'|,而不是我想要的.我尝试使用&s:vimetc,但结果相似.有谁知道如何做到这一点?

vim set let

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

为什么const在JavaScript中的一些for循环中起作用?

知道为什么const在for循环中不起作用.我们需要创建一个新的范围并将值复制到其中.所以这不会飞.

for(const i = 0; i < 5; i++) console.log(i);
Run Code Online (Sandbox Code Playgroud)

虽然这样会.

for(let i = 0; i < 5; i++) console.log(i);
Run Code Online (Sandbox Code Playgroud)

但是,我注意到它们在循环通过像这样的对象的属性时工作.

for(let property in thingy) console.log(property);
for(const property in thingy) console.log(property);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么.

javascript scope const let ecmascript-6

16
推荐指数
2
解决办法
5072
查看次数

为什么没有以def形式进行破坏?

在一个let形式(Clojure在这里)我可以做类似的事情

(let [[u s v] (svd A)] 
   (do-something-with u v))
Run Code Online (Sandbox Code Playgroud)

其中svd返回长度为3的列表.这是一件很自然的事情,为什么我们不这样做呢?

(def [u s v] (svd A))
Run Code Online (Sandbox Code Playgroud)

及其各种概括作为def表单的默认行为?我不知道这会如何干扰def已经在做的事情.理解Lisp或Clojure的Zen的人能解释为什么def不支持绑定(与解构)一样强大let吗?

lisp function clojure destructuring let

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