Project1

标题: 方法中的.new有甚麼作用 [打印本页]

作者: TERENCE    时间: 2008-3-17 23:05
标题: 方法中的.new有甚麼作用
方法中的.new有甚麼作用?
有加.new跟沒加.new又有甚麼差别?
作者: 禾西    时间: 2008-3-17 23:15
方法(method)沒有.new


class.new
加了會調用initialize方法并可以調用內部所有方法
不加會出錯,就是這樣。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: TERENCE    时间: 2008-3-18 19:17
我的意思是如下:
class HelloWorld
def initialize(myname="Ruby")
  @name=myname
end
def hello
  print "I am a ",@name
end
end
rgss1=HelloWorld.new
rgss2=HelloWorld.new("TERENCE")
rgss1.hello  #->显示I am a Ruby
rgss2.hello  #->显示I am a TERENCE
class HelloWorld
def apple(myname="Ruby")
  @name=myname
end
def hello
  print "I am a ",@name
end
end
rgss1=HelloWorld.apple
rgss2=HelloWorld.apple("TERENCE")
rgss1.hello  #->显示I am a Ruby
rgss2.hello  #->显示I am a TERENCE

这两种显示效果不是都一样吗??
有何差别??
作者: 禾西    时间: 2008-3-18 19:27
第二段代碼會出錯
class.new.method是一種調用class內方法的固有書寫格式
作者: TERENCE    时间: 2008-3-18 19:36
以下引用禾西于2008-3-18 11:27:54的发言:

第二段代碼會出錯
class.new.method是一種調用class內方法的固有書寫格式
以下引用禾西于2008-3-18 11:27:54的发言:

第二段代碼會出錯
class.new.method是一種調用class內方法的固有書寫格式

一定要
rgss1=HelloWorld.new.apple
rgss2=HelloWorld.new.apple("TERENCE")
这样吗??

作者: 禾西    时间: 2008-3-18 19:37
這兩句就開始出錯了……
rgss1=HelloWorld.apple
rgss2=HelloWorld.apple("TERENCE")

rgss1.hello  #->显示I am a Ruby
rgss2.hello  #->显示I am a TERENCE

這兩句是等於
HelloWorld.apple.hello  #->显示I am a Ruby
HelloWorld.apple("TERENCE").hello  #->显示I am a TERENCE

class.方法.方法是嚴重的語法錯誤
作者: wy29    时间: 2008-3-18 19:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2008-3-18 19:46

class HelloWorld
def HelloWorld.hello(name)
  print name," said Hello."
end
end
HelloWorld.hello("TERENCE")

HelloWorld.hello("TERENCE")为什么 不加.new就可以显示TERENCE said Hello.??
作者: 雷欧纳德    时间: 2008-3-18 19:55
.new是在内存中创建一个类的实例

没有实例 类本身只是空谈
有了实例,类的定义才有了实际意义

当然,静态方法允许在没有实例的情况下被调用 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 禾西    时间: 2008-3-18 19:59
這樣的代碼……
你在外部直接class內部方法會被Ruby自動漠視的。語法就是語法,不是改個假的名字就可以的。

提出反例子之前最好自己試驗一下吧?

PS。wy的解說真是精闢……囧rz
作者: TERENCE    时间: 2008-3-18 20:30
以下引用禾西于2008-3-18 11:59:20的发言:

這樣的代碼……
你在外部直接class內部方法會被Ruby自動漠視的。語法就是語法,不是改個假的名字就可以的。

提出反例子之前最好自己試驗一下吧?

PS。wy的解說真是精闢……囧rz


[本贴由作者于 2008-3-18 12:01:02 最后编辑]

class HelloWorld
def HelloWorld.hello(name)
print name," said Hello."
end
end
HelloWorld.hello("TERENCE")
这是某RUBY书本写的~~~
因为看起来怪怪的所以我才拿出问一下.....
作者: 禾西    时间: 2008-3-18 20:35
恐怕那本書是寫:
def HelloWorld.hello(name)
print name," said Hello."
end
HelloWorld.hello("TERENCE")

吧?否則可能是盜版……==|||
作者: TERENCE    时间: 2008-3-18 20:43
以下引用禾西于2008-3-18 12:35:55的发言:

恐怕那本書是寫:

def HelloWorld.hello(name)
print name," said Hello."
end
HelloWorld.hello("TERENCE")


吧?否則可能是盜版……==|||


[本贴由作者于 2008-3-18 12:36:18 最后编辑]

不!!是这样写的没错~~~
它是说这个叫做类别方法定义的方式....
作者: 禾西    时间: 2008-3-18 21:02
1.不是。可以沒有
2.就我所知是
作者: wy29    时间: 2008-3-18 21:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE    时间: 2009-6-12 08:00
反正总归二句话:
是不是class內一定要有def initialize?
是不是調用class內部所有方法一定要有.new?





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