ruby学习笔记:[Ruby 学习笔记] 3. 变量和常量

  变量持有目标对象引用和我们所熟悉 C# / Java 区别Ruby 变量并没有内在类型作为种动态解析执行语言其变量类型只在其执行期决定我们也因此能改变变量所持有对象类型显然在 C# / Java 里是不允许 (Object 类型变量和这个不是回事如果不明白建议再看看面向对象理论)

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# 类静态字段基本是个东西被所有例子对象共享而例子变量仅属于当前例子缺省情况下在对象外部我们并不能访问它

Tags:  ruby学习笔记

延伸阅读

最新评论

发表评论