Tag:

在clojure中让vs

我想在clojure程序中创build一个Java Scanner类的本地实例。 为什么这不起作用: ;gives me: count not supported on this type: Symbol (let s (new Scanner "abc")) 但它会让我创build一个像这样的全局实例: (def s (new Scanner "abc")) 我的印象是,唯一的区别是范围,但显然不是。 let和def有什么区别?

让我们与Clojure绑定吧

我明白,他们是不同的,因为一个工程设置*compile-path*而不是。 不过,我需要帮助他们为什么不同。 let定的绑定创build一个新的作用域,但binding …?

Java编译器中的“let expression”(LetExpr)的目的是什么?

Java编译器似乎支持在com.sun.tools.javac.tree.*查找expression式(查找LetExpr )。 JCTree的一个评论甚至提到了一些语法 (let int x = 3; in x+2) 这当然不被语言的语法所接受,并在早期的编译器阶段被拒绝。 我想知道这个构造的起源,这是我以前从未见过的。 它是由javac内部使用还是由其他工具合成? 这可能仅仅是从Java早期的语言特征,从未见过光的一个神器? 今天有什么有用的东西可以用吗? 一般来说,它为什么存在?

哈斯克尔:在哪里与让

我是Haskell的新手,我很迷惑Where- Let 。 他们似乎都提供了类似的目的。 我已经读了几个比较之间的比较,但我很难辨别什么时候使用每个。 有人可以提供一些上下文,或者可以举几个例子来说明什么时候使用一个吗? 在哪里与让 where子句只能在函数定义的级别上定义。 通常,这与let定义的范围是一致的。 唯一的区别是当警卫正在使用 。 where子句的范围遍及所有的守卫。 相比之下, letexpression式的范围只是当前的函数子句和守卫(如果有的话)。 Haskell备忘单 Haskell维基是非常详细的,并提供了各种情况,但它使用假设的例子。 我觉得它的解释对于初学者来说太简单了。 Let的优点 : f :: State sa f = State $ \x -> y where y = … x … Control.Monad.State 将不起作用,因为where引用了模式匹配f =,其中x不在范围内。 相反,如果你开始放手,那么你就不会有麻烦了。 Haskell Wiki关于Let的优点 f :: State sa f = State $ \x -> let y = […]

为什么在JavaScript中为“块”范围的variables声明select了“let”?

我明白为什么var需要这个名字 – 它是可变的, const – 它是一个常量,但let的名字后面的含义是什么? 随它去?

让语句在全局对象上创build属性?

在JavaScript中, var声明在全局对象上创build属性: var x = 15; console.log(window.x); // logs 15 in browser console.log(global.x); // logs 15 in Node.js ES6引入了具有块范围的声明的词法范围。 let x = 15; { let x = 14; } console.log(x); // logs 15; 但是,这些声明是否会在全局对象上创build属性? let x = 15; // what is this supposed to log in the browser according to ES6? console.log(window.x); // 15 in […]

用let或const声明variables是不是在ES6中悬挂的?

我一直在玩ES6一段时间,我注意到,虽然用var声明的variables是如预期的那样悬挂着… console.log(typeof name); // undefined var name = "John"; …使用let或const声明的variables在提升时似乎有一些问题: console.log(typeof name); // ReferenceError let name = "John"; 和 console.log(typeof name); // ReferenceError const name = "John"; 这是否意味着使用let或const声明的variables不会被挂起? 这里究竟发生了什么? let和const在这个问题上有什么区别吗?