所以我以为我会学习一些Ruby。我正在玩翻译,但我想制作更大的程序,所以我下载了Aptana,一个IDE。当我尝试运行此代码时:
class HelloWorld
def h
puts "hello World!"
end
h
end
它给出了一个错误,表示h是一个未定义的局部变量。当我将命令输入解释器(没有类的开始和结束)时,它会按照我想要的方式调用它。
我在这里不知所措。发生了什么事?
答案 0 :(得分:3)
在定义类时,您定义的方法是instance
方法。这意味着你会这样称呼它们:
class HelloWorld
def h
puts "hello world!"
end
end
instance = HelloWorld.new
instance.h
Ruby抱怨你的方法不存在,因为在定义类体时,所做的任何函数调用都是class
方法(或singleton
方法)。
如果你真的想这样做,你会这样做:
class HelloWorld
def self.h
puts "hello World!"
end
h
end
答案 1 :(得分:0)
您的问题是,您在h
范围内发送了class
消息。 (我相信一些有更多Ruby经验的人会想要纠正我的措辞;而且,如果我完全错了,请接受我的道歉。)
您可以通过h
上的其他实例方法发送HelloWorld
:
class HelloWorld
def h; puts "hello world!"; end
def g
h
end
end
HelloWorld.new.g
# => "hello world!"
答案 2 :(得分:0)
试试这个
class HelloWorld
def self.h
puts "hello World!"
end
h # you can only call h like this if it is defined as a class method above
end
HelloWorld.h # you can call the class method like this also
你需要将h定义为类方法来像这样调用它。或者,你可以这样做
class HelloWorld
def h
puts "hello World!"
end
end
a = HelloWorld.new # instantiate a new instance of HelloWorld
a.h
祝你好运!