a = 1
puts a. #Fixnum
a = "s"
puts a. #String
或许你看过 C# 3.0但需要明白这和那个隐式类型变量(Implicitly typed local variables)并不是回事"var" 关键字只是种简写种语法糖编译器会自动推断并在编译时决定其类型细节可以参考我前面写文章
名字
这里提到命名规则仅仅是变量有关类型、思路方法命名参考后面章节
(1) 名字由个大小写字母(a-z)或下划线(_)开头后跟任意个命名(大小写字母、下划线或数字)组成
(2) 局部变量通常由小写字母开头
(3) 例子变量名以"@"开始第个命名小写
(4) 类变量以 "@@" 开始第个命名大写
(5) 全局变量以 "$" 开始
(6) 常量名通常以大写字母和下划线组成
有关 Ruby 命名前缀感觉有点别扭不过记忆思路方法也很简单根据其作用域范围越大越有 "钱"自然全局变量是货真价实 "$"然后是大家(对象例子)共有"领导"——类变量每月发两包子(@@);例子变量相比起来只能是"白领"了只有个包子(@);最惨就是局部变量了什么都没有…… ~~~~~
$Global = "Word!"
Class1
@@I = 0
def initialize
@name = "Tom!"
end
def test
a = 123456
puts a
end
end
常量
Ruby 允许你改变常量值这对我而言恐怕不是啥好事情
NAME = "name"
puts NAME
# Line 100, 许木木说: 做好多好多有意义事情
# Line ...
# Line 1000, 许木木说: 做好多好多有意义事情
NAME = "sss" # 我以为是重新定义了个常量其实不小心改了上面 "大哥" 内容
puts NAME
输出:
name
sss
.rb:6: warning: already initialized constant NAME
输出结果里面这个警告信息对于执行而言并无任何约束作用
作用域
在类或模块内任意位置都可以访问此类或模块中定义常量在这的外可以通过域作用符(::)访问
举例1
NAME = "Tom"
Class1
def test
puts NAME
end
end
puts NAME
Class1..test
举例2
Class1
NAME = "Tom"
def test
puts NAME
end
end
puts Class1::NAME
Class1..test
全局变量贯穿整个当我们 load 或 require 个模块时也会将其全局变量引入因此我们应该避免滥用全局变量这可能和其他模块造成冲突就个人感觉而言我不太喜欢全局变量/常量这种东西它更多地象很久以前结构化编程遗迹
test.rb
$name = "zhangsan"
def test
puts $name
end
.rb
require "test.rb"
$name = "lisi" # 原本以为创建了个新家伙却不小心 "改变" 了 "别人" "财产"
test
类变量和 C# 类静态字段基本是个东西被所有例子对象共享而例子变量仅属于当前例子缺省情况下在对象外部我们并不能访问它
最新评论