Project1

标题: 这两个脚本的写法采取哪个比较好? [打印本页]

作者: 夜狠简单    时间: 2013-1-10 00:55
标题: 这两个脚本的写法采取哪个比较好?
#找出不同的原因
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

作者: 夜狠简单    时间: 2013-1-10 00:57
头大了,DS。指点一下
作者: 创造达人    时间: 2013-1-11 23:28
因为a2=》7
作者: 哀筝一弄湘江曲    时间: 2013-1-12 21:11
不能理解@@a是個什麼寫法……
求樓主指教。
不過個人來看是算法越簡潔越好,是在功用不變的情況下。
作者: zhangbanxian    时间: 2013-1-14 00:25
本帖最后由 zhangbanxian 于 2013-1-14 00:27 编辑

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




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1