试图弄清楚这段代码有什么问题

时间:2016-06-25 14:18:25

标签: ruby

我无法提出解决方案。

class Person
  def initialize(name)
    @name = name
  end

  def greet(other_name)
    @other_name
    print "Hi #{@other_name}, my name is #{@name}"
  end
end

kit = Person.new("Tom", "Jerry")
kit.greet

我很感激你的帮助。

3 个答案:

答案 0 :(得分:0)

在initialize方法中,你应该接受两个参数,因为你用两个参数调用它。您在@other_name函数中声明greet变量而不是initialize函数。

这样可行。

class Person 
  def initialize(name, other_name) 
    @name = name
    @other_name = other_name
  end

  def greet 
    print "Hi #{@other_name}, my name is #{@name}" 
  end 
end

kit = Person.new("Tom", "Jerry") 
kit.greet

https://repl.it/C5wn

答案 1 :(得分:0)

你必须做出决定:

初始化Person时是否要提供这两个名称:

class Person
  def initialize(name, other)
    @name = name
    @other = other
  end

  def greet
    puts "Hi #{@other}, my name is #{@name}"
  end
end

kit = Person.new("Tom", "Jerry")
kit.greet
#=> Hi Jerry, my name is Tom

或者您想在调用greet方法时提供第二个名称:

class Person
  def initialize(name)
    @name = name
  end

  def greet(other)
    puts "Hi #{other}, my name is #{@name}"
  end
end

kit = Person.new("Tom")
kit.greet("Jerry")
#=> Hi Jerry, my name is Tom

答案 2 :(得分:0)

考虑编写这样的代码:

class Person
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def greet(person)
    puts "Hi #{person.name}, my name is #{name}"
  end
end

tom = Person.new("Tom")
jer = Person.new("Jerry")

tom.greet(jer) #=> Hi Jerry, my name is Tom.

这样你实际上有另一个人作为对象而不仅仅是一个名字。