查看: 1737|回复: 4

[已经解决] 这两个脚本的写法采取哪个比较好?

[复制链接]
梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2013-1-10 00:55:36 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#找出不同的原因
class A
  attr_accessor :b
  @@a = 5
  def initialize(n)
    @b = n
  end
  def a
    return @@a
  end
  def a=(n)
    @@a = n
  end
end
#_运算一________________________________
v1 = A.new("a5")
v2 = A.new("a9")
p v1.a #=>"5"
p v1.b #=>"a5"
p v2.a #=>"5"
p v2.b #=>"a9"
#_运算二_______________________________________
v2.a = "a4"
v2.b = "a8"


p v1.a  #=>"a4"
p v1.b  #=>"a5"
p v2.b  #=>"a8"
p v2.a  #=>"a4"

# 定义类
class B
  attr_accessor :a
  @a = 100
  @@a = 999
  def a2
    return @@a
  end
  def a2=(a2)
    @@a = a2
  end
end

# 生成实例
v1 = B.new
v2 = B.new

# 测试
v1.a = "晕倒"
v2.a = "死撑"

p v1.a # “晕倒”
p v2.a # “死撑”

v1.a2 = "第一个"
v2.a2 = "第二个"

p v1.a2 # "第二个"
p v2.a2 # "第二个"


█问题:这句v2.a2 = "第二个"的解释是修改@@a的值吗?

# 定义类
class B
  attr_accessor :a
  @a = 100
  @@a = 999
  def a2
    return @@a
  end
  def a2=(a2)
    @@a = a2
  end
end

  █问题:为什么这里第二个用a2
  █而下一个用的是a=(n),括号里面的n是一个什么样的数?

class A
  attr_accessor :b
  @@a = 5
  def initialize(n)
    @b = n
  end
  def a
    return @@a
  end
  def a=(n)
    @@a = n
  end
end
梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
 楼主| 发表于 2013-1-10 00:57:46 | 显示全部楼层
头大了,DS。指点一下
回复

使用道具 举报

梦石
0
星屑
56
在线时间
342 小时
注册时间
2011-10-29
回帖
327
发表于 2013-1-11 23:28:37 | 显示全部楼层
因为a2=》7
回复

使用道具 举报

梦石
0
星屑
49
在线时间
23 小时
注册时间
2013-1-12
回帖
38
发表于 2013-1-12 21:11:35 | 显示全部楼层
不能理解@@a是個什麼寫法……
求樓主指教。
不過個人來看是算法越簡潔越好,是在功用不變的情況下。

点评

我也不太清楚,不过好像是通用的那样  发表于 2013-1-13 01:39
回复

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
回帖
1296
发表于 2013-1-14 00:25:33 来自手机 | 显示全部楼层
本帖最后由 zhangbanxian 于 2013-1-14 00:27 编辑

@是实例变量,@@是类变量,在def之外的@其实也是类变量,总之ruby一切都是对象,声明class时其实就产生了一个class对象,而该class的实例对象则是在class#new时才会产生...

评分

参与人数 1星屑 +50 收起 理由
咕噜 + 50 我很赞同

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部