Project1

标题: ruby问题.def 方法名=() [打印本页]

作者: 阿单同学    时间: 2007-12-19 05:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 阿单同学    时间: 2007-12-19 05:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 黑撒旦    时间: 2007-12-19 06:55
lx两位殿下有讨论,不献丑了。{/hx}
作者: bbschat    时间: 2007-12-19 07:06
楼主可以把“方法名=”整体的看成是一个方法名。

另外
def motherland=(value)
return @motherland =value
end

在Ruby中可以用 attr_writer:motherland 代替。

作者: 美兽    时间: 2007-12-19 07:22
郁闷——
作者: bbschat    时间: 2007-12-19 07:33
以下引用美兽于2007-12-18 23:22:20的发言:


以下引用bbschat于2007-12-18 23:06:42的发言:

给对象属性赋值的方法。
可以用 attr_writer:对象属性名 代替

实际attr_writer:与def 方法名=(***)
有很多区别。


是我没说清楚,在楼主的例子里2者是等价的。
当然 def 里面可以写更多东西。

作者: 美兽    时间: 2007-12-19 07:36
郁闷——
作者: bbschat    时间: 2007-12-19 07:41
以下引用美兽于2007-12-18 23:36:38的发言:

呵呵,我的意思并非是定义内容,

而是访问顺序,权限和继承的一些区别。


有吗?我倒不知道,请教一下美兽,具体的区别是啥?{/fd}
作者: 美兽    时间: 2007-12-19 08:27
有吗?我倒不知道,请教一下美兽,具体的区别是啥?


如何说呢?
attr实际定义的是个读写属性,而非类的属性。
而def a=定义的是个虚拟属性,但他可以真的当作类的属性来使用。

具体


class S1
   attr_reader :name
end

class S2
   def name=(n)
       @name = n
   end  
end

s1 = S1.new
s1.name = 10        #出错
s2 = S2.new
s2.name = 10        #正常


[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: bbschat    时间: 2007-12-19 08:36
以下引用美兽于2007-12-19 0:27:49的发言:


具体


class S1
  attr_reader :name
end

class S2
  def name=(n)
      @name = n
  end  
end

s1 = S1.new
s1.name = 10        #出错
s2 = S2.new
s2.name = 10        #正常


attr_reader 是只读属性,不能在类外面赋值。
你例子里使用 attr_writer 是不会出错的。


作者: bbschat    时间: 2007-12-19 08:43
ps:

attr_ reader :motherland



def motherland
return @motherland
end

是等价的。

attr_accessor :motherland

相当于

attr_reader:motherland
attr_writer :motherland

[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 美兽    时间: 2007-12-19 09:34
以下引用bbschat于2007-12-19 0:43:49的发言:

ps:

attr_ reader :motherland



def motherland
return @motherland
end

是等价的。

attr_accessor :motherland

相当于

attr_reader:motherland
attr_writer :motherland




[本贴由作者于 2007-12-19 0:47:07 最后编辑]


又试了很久,
仍然没找到,
算了,可能记错了{/gg}




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