想着对比其他语言能加深我的理解吧,如果有理解错误还请指正!
1.类变量
@@name
这个在OC和 Java中我都是没有遇到过的,目前还没有学到Ruby的静态属性,
我理解为就是某个类的 实例或者其子类实例可以同时访问改 变量,且在内存中仅有一份,这个感觉略吊,我真没遇到过呀!
2.实例变量
@name
这个在OC中就是成员变量或者属性吧 一般写成 _name 或者 @property NSString name 自动生成,也可以使用self.name (仅限property标识)
java中的话就是 this.name 调用这样了
3.全局变量
$name
这个看描述就更吊了,所有Ruby文件都能访问到,
我可以理解为单例的属性值这样吗?
以前竟然把实例变量就理解成了成员变量或者全局变量,感觉很狭隘呀,
4.局部变量
name
这个在大多数语言中都有了,比如在一个{ }内定义的变量, { }外是访问不到的.
但是在Ruby中好像不怎么用{ }设置作用域啊,所以这个应该比较一致吧,比如在方法(函数)内部定义的变量,外部不可访问
***
另外再总结一下 p print puts
string0 = '#{name}'
string1 = "#{name}"
p string0
puts 'p'
p string1
# p会自动换行 打印内容带 "双引号" 不识别转义字符
print string0
puts 'print'
print string1
# print不会自动换行 打印内容不带 "单/双引号" 识别转义字符
puts string0
puts 'puts'
puts string1
#puts会自动换行 打印内容不带 "单/双引号" 识别转义字符
说到这里不得不带出Ruby中的单引号和双引号的区别了, 因为一开始我用双引号IDE(IDEA安装Ruby插件)竟然给了我警告,搜索下才明白假如你仅仅就是普通的字符串不需要格式化拼接合成什么的就用单引号,原封不懂的给你打印出来,包括转意字符都不识别呀.双引号作用就大了,但是如果你作为一个变量名这样的用 'jhon' 就可以了.见有的文章说p的作用就是完整打印,包括双引号,其实是错误的,因为我单引号的string0,p打印出来的结果也是双引号包含.
接触新的语言,思考已学过(旧)的语言,对新旧语言都能有更深刻的理解,但是这种知识入侵会让人混乱,比如Swift中的 range ,
Ruby: 1..3 是1, 2, 3 ; 1...3 是1, 2
Swift: 1..<3 是1, 2; 1...3 是1, 2, 3
惭愧呀,刚半个月前看了些Swift相关的,然后现在又忘记的差不多了写上面的那一句时竟然在playground中实验了一下,差点儿写错.先把这几门语言看完,再深入吧.
相比之下,JavaScript就基本与Java很相似的语法了,