1
snachx 2014-06-22 07:46:27 +08:00 via Android
let a =1, 大概就是让a等于1吧…,没啥缩写
|
2
casparchen 2014-06-22 07:47:03 +08:00 via iPad
这难道不是 让 的意思么。让pi这个符号等于3.14
let pi = 3.14 ? |
3
ffffwh 2014-06-22 07:49:07 +08:00
数学课上有没有听过“令x=***”,就是这个let。
这个常量更接近于functional programming的“XX量”,而不是C家族的const。 |
4
Zhang 2014-06-22 07:49:44 +08:00
BASIC里面用let定义变量。
|
5
limuxy 2014-06-22 07:50:09 +08:00
木有缩写 就是自然语言 (话说这是新语言的趋势吗?越来越接近自然语言?
|
6
skybr 2014-06-22 07:50:48 +08:00
就是let的let吧
至于为什么用let, 开个玩笑. 其他像scala的地方已经很多了, 不好意思再用val, 就再从rust那边摘点喽. |
7
WildCat 2014-06-22 07:58:09 +08:00
let
英 [let] 美 [lɛt] 允许,任由; 让,随; 假设; 出租 |
8
sanddudu 2014-06-22 08:03:17 +08:00
let it go
|
9
shippo7 2014-06-22 08:07:31 +08:00
Swift不再需要定义变量的属性(int,double,char之类的),用let占位置了,同时将代码趋近于自然语言
|
10
jsonline 2014-06-22 08:25:11 +08:00 via Android
语法还有为什么么?
|
11
riaqn 2014-06-22 08:28:50 +08:00
lisp里赋值就是let。
黑客与画家里面说:越是新的语言,就越是接近lisp。 |
13
guoqiao OP 把let解释成数学里的"令"固然可以说得通, 但把它和var放在一起对比, 就觉得很不和谐, 类似的定义, 完全不同的语义. 这也是我有点疑惑的原因.
目前来说, swift这门语言给我的感觉, 谈不上很好, 有东拼西凑的感觉, 语法不够精炼, 而且作者对代码的taste并不是很好. 但无论如何, 至少比objc要强不少. |
14
eriale 2014-06-22 09:06:44 +08:00
lisp中给变量赋值就是let。
lisp中表达式第一个符号基本上都是动词,赋值也是表达式,我估摸着为了统一风格,就用let作为赋值表达式的第一个符号。 |
15
guoqiao OP @eriale 嗯, lisp这种做法自然是很赞的.
但在Swift里, 定义变量是var, 名词. 而到了定义常量, let, 是动词. 况且, let没有一点点定义"常量"的含义在里面, 只是生硬的把别的语言里定义变量的关键词拿过来, 用来定义常量. 这对编程语言的语法优雅与否十分敏感, 所以这个地方让我有点想吐槽. |
16
binux 2014-06-22 09:42:51 +08:00 2
@guoqiao
如果你这么看: variable a, b, c; let d = 1; variable 不需要赋初值,如果只是声明,没必要用动词。赋初值只是附加功能 let 在有些语言中是就是变量,即使是有些同样有 var 的语言中。只能说就是这么定的,不然你要用 let const d = 1 吗? |
17
binux 2014-06-22 09:43:40 +08:00
更正:
不赋初值需要指定类型 |
18
superbear 2014-06-22 10:06:16 +08:00
lua
|
19
Perry87 2014-06-22 10:48:38 +08:00 via iPhone
对于强制类型转换,象 Int 转 String ,语法是 String(var) ,当 Optinal String 转 Int 又是 var.ToInt?
另外象 String 和 Array 的计数,一个是用括弧传参数,一个又是用点运算符传消息。 |
20
love 2014-06-22 11:14:11 +08:00
let没有值不变的意思吧?为什么不用const呢。
|
21
hongdengdao 2014-06-22 12:01:24 +08:00
scala党表示很淡定,哈哈
|
23
ipconfiger 2014-06-22 12:15:27 +08:00
抠字眼有意思么?
|
24
notcome 2014-06-22 13:32:15 +08:00
我看不出有何不妥,数学上也是 let sth = expr,只是接下来 sth 没有发生变化罢了
|
25
caoz 2014-06-22 14:45:17 +08:00
And God said, "Let there be light," and there was light.
|
26
akfish 2014-06-22 14:53:32 +08:00
po主想象力真丰富,居然认为let是缩写
多看点英文版的数学类文献吧。 A Guide to Writing Mathematics http://www.cs.ucdavis.edu/~amenta/w10/writingman.pdf 见第10页:Defining variables and formulas |
27
lyazure 2014-06-22 14:58:28 +08:00 via Android 1
@guoqiao 你需要rust语言,哈哈, let同样表示赋值后不可变,而定义可变的变量用的是let mut, 其中mut是指mutable可变的。
swift尝试抄各种语言优点于一身,比如rust, haskell, ruby等,这是作者都承认的,但要融合这些语言优点的同时又实现语言设计理念的纯粹和一致性也是不容易的,swift做得还算不错了。 站在llvm和jvm的肩膀上,现在要设计实现一门语言已经很容易了,以后新出现的语言理念会越来越先进,语法也会优美,每个人都能找到自己喜欢的语言的,哈哈 |
28
akfish 2014-06-22 15:01:38 +08:00
在数学里,被let定义过后的东西,一般不会再次被定义/赋值,在代码里对应的就是常量。
不要被标题里"defining variables"给迷惑了,数学里关心的是关系/性质,而不是值。所以这是说把一个符号定义为变量,这个符号作为变量的性质在定义过后一直是一个常量。 至于var,当然是variable的缩写。所以let和var的区分并无不妥。 |
29
Seita 2014-06-22 16:16:22 +08:00 via iPhone
let 表示命令,命令带有不可更改的意思 XD
|
31
ioth 2014-06-22 17:31:59 +08:00
basic,第一门学习的语言,快30年了。
|
32
guoqiao OP 谢谢各位的解答, 有一些答案很有价值.但总体说来,我对这个问题的结论是:
1. 语言的作者就是拿来主义, 直接从别的语言借鉴了比较常用的let关键字,用以区分var. 无他. 2. var和let摆在一起, 是杂糅的风格, 不和谐, 但也无关痛痒. 3. 一些相关的解释能让它的存在看起来更合理一些,但无法改变Swift拼凑语法的事实. 谢谢楼上各位耐心给出解释的大牛! |
34
jiang42 2014-06-22 18:20:55 +08:00
haskell 的语法
|
35
s51431980 2014-06-23 01:02:47 +08:00
怎么没人提scala中的变量定义是var,常量定义是val(value缩写),这应该满足楼主的和谐
Swift和ObjC都不是优雅的语言,但是赚钱的语言 |
36
williamx 2014-07-01 19:55:36 +08:00
Swift 的语法在我看来就是坨大便————但又有什么关系呢?
|