免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2196 | 回复: 1
打印 上一主题 下一主题

总结:Ruby中的@ % # $等各种千奇百怪的符号的含义等 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-24 20:32 |只看该作者 |倒序浏览
总结:Ruby中的@ % # $等各种千奇百怪的符号的含义等











初学RUBY时,一看各种稍微复杂一点的代码时很容易被RUBY各种约定的表示方法搞晕,这整理一下 。




(若标识符首位是小写字母或“_”,则该标识符就是局部变量或方法调用。)

(以大写字母([A-Z])开始的标识符是常数、类名或者模块名)

以@开始的变量是实例变量,它属于特定的对象。可以在类或子类的方法中引用实例变量。

若引用尚未被初始化的实例变量的话,其值为nil。Ruby的实例变量无须声明,每个实例变量都是在第一次出现时动态加入对象。Ruby的实例变量通常在方法中定义类声明——当在方法里声明实例变量时,该实例变量实际上属于该方法所在类的实例,而不是属于该方法。例如
  1. ?1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17 class Apple      
  18.     # 定义第一个方法      
  19.     def info1      
  20.         # 输出实例变量@a      
  21.         puts @a   
  22.     end   
  23.     # 定义第二个方法      
  24.     def info2      
  25.         # 为实例变量赋值      
  26.         @a = "Hello";      
  27.     end   
  28. end   
  29. # 创建Apple类实例      
  30. apple = Apple.new   
  31. # 调用方法      
  32. apple.info2      
  33. apple.info1
复制代码
以@@开始的变量是类变量。在类的定义中定义类变量,可以在类的特殊方法、实例方法等处对类变量进行引用/赋值:
  1. ?1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6 class Foo
  7.   @@foo = 1
  8.   def bar
  9.     puts @@foo
  10.   end
  11. end
复制代码
类变量与常数的区别如下。

可以重复赋值(常数则会发出警告)
不能在类的外部直接引用(在继承类中则可以引用/赋值)
类变量与类的实例变量的区别如下。

可在子类中引用/赋值
可在实例方法中引用/赋值
可以把类变量看作一种被类、子类以及它们的实例所共享的全局变量。
  1. ?class Foo
  2.   @@foo = 1
  3. end
  4. class Bar < Foo
  5.   p @@foo += 1          # => 2
  6. end
  7. class Baz < Bar
  8.   p @@foo += 1          # => 3
  9. end
复制代码
模块中定义的类变量(模块变量)被所有包含该模块的类所共享。
  1. ?module Foo
  2.   @@foo = 1
  3. end
  4. class Bar
  5.   include Foo
  6.   p @@foo += 1          # => 2
  7. end
  8. class Baz
  9.   include Foo
  10.   p @@foo += 1          # => 3
  11. end

  12.   
复制代码
以$开始的变量是全局变量,可以在程序的任何地方加以引用(因此需要特别留意)。全局变量无需变量声明。引用尚未初始化的全局变量时,其值为 nil。

  

%表示法(百分号表示法):

%{String}  用于创建一个使用双引号括起来的字符串
%Q{String} 用于创建一个使用双引号括起来的字符串
%q{String} 用于创建一个使用单引号括起来的字符串
%r{String} 用于创建一个正则表达式字面值
%w{String} 用于将一个字符串以空白字符切分成一个字符串数组,进行较少替换
%W{String} 用于将一个字符串以空白字符切分成一个字符串数组,进行较多替换
%s{String} 用于生成一个符号对象
%x{String} 用于执行String所代表的命令

"%05d" % 123 &raquo; "00123"

"%-5s: %08x" % [ "ID", self.id ] &raquo; "ID:200e1670"




# 用来调用一个方法,




*号:

若左边最后一个表达式前带*的话,则将右边多余的元素以数组的形式代入这个带*的表达式中。若右边没有多余元素的话,就把空数组代入其中。
  1. ?*foo     = 1, 2, 3      # foo = [1, 2, 3]
  2. foo,*bar = 1, 2, 3      # foo = 1; bar = [2, 3]
复制代码
*用在方法定义中表示可变长的变量:

【FROM “ProgrammingRuby”】
  1. Variable-Length Argument Lists

  2. But what if you want to pass in a variable number of arguments, or want to capture multiple arguments into a single parameter? Placing an asterisk before the name of the parameter after the ``normal'' parameters does just that.

  3. ?def varargs(arg1, *rest)
  4.     "Got #{arg1} and #{rest.join(', ')}"
  5. end
  6. varargs("one") &raquo; "Got one and "
  7. varargs("one", "two") &raquo; "Got one and two"
  8. varargs "one", "two", "three" &raquo; "Got one and two, three"



  9. ?irb(main):005:0> def call_back(*a)
  10. irb(main):006:1> a.each do |arg|
  11. irb(main):007:2*    puts  arg
  12. irb(main):008:2> end
  13. irb(main):009:1> end
  14. => nil
  15. irb(main):011:0> call_back(["hello",99])
  16. hello
  17. 99
  18. => [["hello", 99]]
  19. irb(main):012:0> call_back(["hello",99],"hello",99)
  20. hello
  21. 99
  22. hello
  23. 99
  24. => [["hello", 99], "hello", 99]
复制代码
其他用法:
  1. C:\Users\Administrator>irb
  2. irb(main):001:0> [1,2,3] * "hi"
  3. => "1hi2hi3"
  4. irb(main):002:0> [1,2,3] * ";"
  5. => "1;2;3"
  6. irb(main):003:0> [1,2,3] * 3
  7. => [1, 2, 3, 1, 2, 3, 1, 2, 3]
  8. irb(main):004:0> "hi" * 3
  9. => "hihihi"
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-02-24 20:32 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP