2016-10-03 4 views
0

나는 다음과 같은 코드를 가지고 그것을 실행 예상대로 오류를 발생 Array1 "이 표시되면 다음과 같은 오류가 발생합니다.

`<main>': undefined method `my_name' for ["a", "b", "c", "d"]:Array        (NoMethodError) 

나는 그 오류가 의미하는 것이지만 내 코드가 어긋나는 것은 확실하지 않습니다. 이것은 깨진 코드입니다.

class Array1 
    def my_name 
    first_name = "Bob" 
    last_name = "Smith" 
    yield(first_name, last_name) 
    end 
end 

['a', 'b', 'c', 'd'].my_name {|i, x| puts "#{i} #{x}"} 

나는 인생이 잘못되었다고 생각하지 않습니다. 클래스의 메서드에서 yield 함수를 사용하는 방법을 파악하려고합니다. 나는 정말로 그 일에 어려움을 겪고 있으며 누군가 나를 도울 수 있다면 크게 감사 할 것입니다. 감사!

+0

BTW - 'yield'는 기능이 아니지만 키워드 (예 :'def' 또는'end'와 동일한 상태, 예 :'puts'와 같은 상태가 아닙니다)입니다. – Amadan

답변

2

['a', 'b', 'c', 'd']Array (Array1 클래스가 아님) 인스턴스입니다. 클래스 Array1에 정의 된 메서드를 호출하려면 먼저 해당 클래스의 인스턴스를 만들어야합니다.

+1

배열을 서브 클래 싱하는 것은 나쁘고 나쁜 생각입니다. 두 가지 방법 만 추가하면 메소드가 추가됩니다. –

+0

하지만 여기서 내가 혼란스러워하는 곳이 있다고 생각합니다. 앞에서 지정한 두 클래스를 별도의 파일에 넣었습니다. 개별적으로 실행하면 안됩니까? 배열이 내 .rb 파일에도 존재하지 않는다면 [ 'a', 'b', 'c', 'd']와 Array의 인스턴스는 왜입니까? – John123

+2

@ John123 Array는 핵심 클래스입니다. 당신은 항상 그것과 그 방법에 접근 할 수 있습니다. –

3

알 수없는 이유로 Array 인스턴스에서 새로 도입 된 메서드를 호출하려고합니다.

Array1.new.my_name { |i, x| puts "#{i} #{x}" }