2016-11-01 7 views
0

아래 코드를 사용하여 정보를 출력하는을 작성하고 싶습니다.다른 클래스의 객체 배열을 가리키는 인스턴스 변수로 to_s를 만들려면 어떻게해야합니까?

Southside에는 3 명의 팀 구성원이 있습니다. 그 구성원은 다음과 같습니다. 22 세의 다리오. 21 살인 Ted. Bob, 44 세.

현재 내가 얻는 내용은 다음과 같습니다.

Southside에는 3 명의 팀 구성원이 있습니다. 그 구성원은 다음과 같습니다 : I 어려운 찾는거야 부분은 팀 구성원의 배열에있는 Person 클래스 객체의 인스턴스 변수에 액세스

[#<Person:0x000000025cd6e8 @name="Dario", @age=22>, #<Person:0x000000025cd670 @name="Ted", @age=21>, #<Person:0x000000025cd620 @name="Bob", @age=44>]. 
#<Team:0x000000025cd7d8> 

. 여기

은 두 클래스입니다 :

class Team 
    attr_accessor :name, :members 

    def initialize(name) 
    @name = name 
    @members = [] 
    end 

    def <<(person) 
    members.push person 
    end 

    def to_s 
    puts "#{@name} has #{@members.size} team members." 
    puts "Those members are: #{@members}." 
    end 
end 

class Person 
    attr_accessor :name, :age 

    def initialize(name, age) 
    @name = name 
    @age = age 
    end 
end 

south_side_bowlers = Team.new("Southside") 

south_side_bowlers << Person.new("Dario", 22) 
south_side_bowlers << Person.new("Ted", 21) 
south_side_bowlers << Person.new("Bob", 44) 

puts south_side_bowlers 

답변

2

to_s ("#{@name}, who is #{@age} years old")을 Person 클래스 정의합니다. 그럼 할 수있어 @members.map{ |m| m.to_s}.join('. ')

+0

Murad, 잘 작동합니다. 질문 : 'm_to_s'의 'to_s'가 불필요한가요? – user169320

+0

@ user169320 원한다면'@ members.map (& : to_s) .join ('.')'을 할 수 있습니다. –

+0

user169320, Murad는 'Team # to_s'의 두 번째 줄을''{@ members.map {| m | m_to}} .join ('.')} (뿐만 아니라'Person # to_s'를 추가하는 것) –

1

먼저 to_s 방법에 puts을 갖고 싶지 않습니다. 대신 문자열을 반환하십시오. 둘째로, 변수 members은 아마 당신이 그 방법에서 출력하기를 원하는 것이 아닐 것입니다. 대신 사용해보십시오

def to_s 
    %Q(#{@name} has #{@members.size} team members. Those members are #{@members.map{|i| "#{i.name} who is #{i.age}"}.join(', ')}) 
end 
+1

'Person # to_s' 메쏘드를 추가하는 것이 불필요하고'Person' 클래스의 코딩만을 바라 보는 독자들에게 혼란을 줄 수 있으므로 @Murad 's에이 방법을 선호합니다. Eli, 이중 인용 부호가 아닌 왜'% Q (...) '인가? –