Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
@bluetea
会员
第 7521 位会员 / 2013-06-08

[email protected]
6 篇帖子 / 10 条回帖
0 关注者
0 正在关注
1 收藏
未设置 GitHub 信息。
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • 有个新手问题,一直很困惑,在类内定义一个实例变量 @x,在调用时候什么时候用 @x,什么时候省略直接用 x, at 2015年01月02日

    #4 楼 @awking 非常感谢,我明白了,我改了下代码,可以看出来如果不赋值给@x,或者 self.x 的话,x 的 object_id 是不一样的,非常感谢!

    class Point
      attr_accessor :x, :y
    
      def initialize(x=0, y=0)
        @x, @y = x, y
    
      end
    
     def [](index)
    
      case index
      when 0
        puts "x objcet_id = #{x.object_id}\n@x object id = #{@x.object_id}"
      when 1
        y
      else
        raise ArgumentError ," out of range #{index}"
      end
    
     end
    
     def []=(index, val)
    
      case index
      when 0
        x= val
        puts  "x的objcet_id 是:#{x.object_id}"
        puts "@x的object id 是: #{@x.object_id}"
        puts "self的x的object_id 是: #{self.x.object_id}"
      when 1
        y= val
      else
        raise ArgumentError, "out of range #{index}"
      end
    
      end
    end
    
    p1 = Point.new(22,11)
    p p1[0]
    p p1[0] = 333
    
    
  • 有个新手问题,一直很困惑,在类内定义一个实例变量 @x,在调用时候什么时候用 @x,什么时候省略直接用 x, at 2015年01月02日

    #4 楼 @awking 嗯嗯,非常感谢,我大概明白了,我重复你下,您看我说的对吗 代码 1

    case index
      when 0
        x  
    ==begin 这里的x 等价与 @x,是因为ruby在case when结构的代码段读取x变量,case内部作用域没有
    变量x,所以去外部找寻找变量(以前学过一点儿c,c语言在本作用域没找到变量,会去外部找离他最近的变量值,所以找到了@x),结果找到了@x,所以就把@x的值输出,这里x 就成为了@x的简称--这种说法对吗?
    ==end
      when 1
        y
      else
        raise ArgumentError ," out of range #{index}"
      end
    

    代码 2:

    def []=(index, val)
    
      case index
      when 0
        self.x= val 
    ==begin
    这里用self.x @x都可以。但是你如果用 x= val.ruby会认为你要创建一个局部变量x,所以根本不会去外部的作用域去找那个x的变量,而是在本作用域创建一个局部变量x,然后赋值给这个x了
    ==end
      when 1
        self.y= val
      else
        raise ArgumentError, "out of range #{index}"
      end
    
      end
    

    无论如何非常感谢!

  • 有个新手问题,一直很困惑,在类内定义一个实例变量 @x,在调用时候什么时候用 @x,什么时候省略直接用 x, at 2015年01月01日

    #1 楼 @awking 嗯嗯,非常感谢,我了解 attr_reader 不会创建 x=方法,但是为啥@x=赋值又是可以的呢?这段程序中 x 是局部变量,@x是实例变量,这两个到底有啥关系呢?

  • 请问在 model test 中的 assert_equal 是否支持中文 at 2014年01月20日

    #1 楼 @Rei 哦,原来是这个样子哦,多谢喽!

  • 一个镐头书里面的 变量 / 方法 二义性的问题疑问,求解释 at 2013年11月30日

    @blacktulip 明白了,非常感谢!

  • 求助,head first rails 第四章的实验问题,应该有通用性问题! at 2013年07月08日

    #9 楼 @yanhao 恩,可能是,但是也没有 rails 太好的入门书,所以就从它开始了!

  • 求助,head first rails 第四章的实验问题,应该有通用性问题! at 2013年07月08日

    多谢各位了,确实是这个问题,我仔细看了下 headfirst rails 的源码确实错了,那个上面没有写 "="

  • 求助,head first rails 第四章的实验问题,应该有通用性问题! at 2013年07月08日

    #4 楼 @reyesyang 没看明白啊!

  • 求助,head first rails 第四章的实验问题,应该有通用性问题! at 2013年07月07日

    楼上两位,不好意思刚才不太会用发帖的格式,修正了一下,现在代码全了!

  • 根据笨方法学 ruby 碰到奇怪问题?求解 at 2013年06月17日

    好的,多谢,我晚上有 mac 试下!

关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English