zoukankan      html  css  js  c++  java
  • ruby简单的基本 3


    Ruby一切都是对象,它包含了一个恒定.
    例如,可以使用.class物业查看对象的类型,你可以看一下1.class。你会发现常1类型是Fixnum,1但它是Fixnum的一个例子。


    Ruby本类class开始 随着end结束。类名首字母的约定是大写。
    Ruby中的方法以def開始 以end结束,方法名首字母的约定是小写。
    Ruby中的局部变量名首字母的约定是小写。


    Ruby中的构造函数名称为initialize。
    Ruby中的成员变量(实例变量)前导@符,在initialize里进行声明与初始化。
    Ruby中的属性用attr, attr_reader, attr_writer, attr_accessor。
    Ruby中的全局变量前导$符。


    Ruby中的常数(常量)用大写字母开头,约定是所有大写。


    initalize方法 



    当Ruby创建一个新对象时,它总是会寻找一个名为 initialize 的方法并执行它.因此,我们能够简单通过一个initialize方法向实变量中增加缺省值。


    class Person
    
    
      def initialize()
        puts "hello!"
      end
    
    
     # def initialize  #()省略一样
     # 		puts "hello!"
     # end
    
    
     #參数默认值
     # def initialize (param = "1900lab") # 參数带有默认值
     # 		puts "hello! " + param
     # end
    
    
     #可变长參数
      def youInput(*names)
          puts "input #{names.join(",")}!"
      end
    end
    
    
    p = Person.new()
    和 p = Person.new 一样,没有參数()能够省略。




    属性

    目的是高速生成读写方法


    attr :attr1, key
    attr_reader :attr1, :attr2
    attr_writer :attr1, :attr2
    attr_accessor :attr1, :attr2


    attr 一般后跟一个符号參数, 第二个參数是一个 bool 參数,用于指示是否为符号參数产生写方法。它的默认值是 false,仅仅产生读方法。不产生写方法。


    attr_reader 一般后跟一个符号參数,定义一个或多个仅仅读的属性,用于指示为符号參数产生读方法。
    attr_writer 一般后跟一个符号參数,定义一个或多个仅仅写的属性。用于指示为符号參数产生写方法。
    attr_accessor 一般后跟一个符号參数。定义一个或多个可读写的属性,用于指示为符号參数产生读写方法。


    为什么要用 符号
    我们可能会有疑问,为什么 attr 后面要用符号呢(冒号:+ 变量)?


    事实上我们不用符号也能够的

    class Person
    
    
      attr "name",true
    
    
    end
    
    
    p = Person.new()
    p.name = "xiao ming"
    puts p.name




    我们须要知道

    符号是不可改变的字符串,也不可被GC的 
    在大多数情况下,接受符号作为參数的方法也能接受字符串。反过来不成立; 
    每个符号在对象空间中仅仅出现一次,用符号要比用字符串省内存


    为什么Ruby runtime能够保证每个symbol唯一?

    这是由于Ruby把symbol存放在执行时维护的一个符号表里了,而这个符号表实际上是一个atom数据结构,当中存储着当前所有的程序级的name。确保不出现内容同样的多个对象。

    差点儿每个语言和系统都会有这样一个符号表,仅仅只是象C/C++那样的语言,这个符号表仅仅是在编译时存在,执行时就没了。而Python、Ruby则在执行时也保留这张表备用。


    为什么用符号

    仅仅所以用符号不用字符串,我想主要是内存和效率这两个方面吧。
    Ruby中两个内容同样的字符串文本量实际上是两个不同的对象。


        a = "hello"
        b = "hello"
    尽管俩字符串内容都一样,但是,你比什么a和b,你懂的a.object_id != b.object_id。他们指出,是不一样的对象。
    假设字的串,p.name = "xiaoming" 和 p.name = "红" 它可能最多2时代记忆。


    效率可能是为了避免多个动态生成的字符串,。

  • 相关阅读:
    学习练习 java输入输出流 练习题1
    学习总结 java Iterator迭代器练习
    学习总结 java 输入输出流
    学习记录 java 哈希
    学习记录 java 链表知识
    学习总结 java 异常
    学习练习 java 集合
    web压缩gzip响应
    web乱码问题
    web附件中文名
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5035652.html
Copyright © 2011-2022 走看看