class NameData
def initialize
@name="Cleetus"
end
class Greetings
def hello()
puts "Hello #{@name}! How wonderful to see you today."
end
end
end
greet=Greetings.new
p greet.hello
我是一个初学者,但我想让我的名字在Greetings类中使用,所以字符串将打印出我的名字。有什么想法吗?
答案 0 :(得分:1)
在Ruby中将多个类放在同一个模块(有时称为“命名空间”)中是很常见的,但是在另一个类中有一个类是不常见的。即使你这样做仍然是一个单独的类,并且无法访问“外部”类中的实例变量。
您需要做的是在NameData对象之外访问@name
值。在Ruby中执行此操作的常用方法是使用属性读取器:
class NameData
attr_reader :name
def initialize
@name = "Cleetus"
end
end
name_data = NameData.new
puts name_data.name
# => Cleetus
完成后,您需要告诉您的Greetings对象有关NameData对象以及如何使用它。一种方法是将NameData对象作为参数传递给hello
:
class Greetings
def hello(name_data)
puts "Hello #{name_data.name}! How wonderful to see you today."
end
end
greet = Greetings.new
greet.hello(name_data)
# => Hello Cleetus! How wonderful to see you today.
另一种方法是将它传递给Greetings构造函数并将其保存在实例变量中:
class Greetings
def initialize(name_data)
@name_data = name_data
end
def hello
puts "Hello #{@name_data.name}! How wonderful to see you today."
end
end
greet = Greetings.new(name_data)
greet.hello
# => Hello Cleetus! How wonderful to see you today.
答案 1 :(得分:0)
@name
变量是实例变量,不同类中的方法无法看到它。它只能通过同一类中的方法来查看。试试这个:
class Greetings
def initialize
@name="Cleetus"
end
def hello()
puts "Hello #{@name}! How wonderful to see you today."
end
end
greet = Greetings.new.hello