2014-11-10 7 views
0

필자는 Full Stack Developer가되기위한 모험에 착수했습니다. 커맨드 라인, 기본 Ruby 구문 등 (초보자 용 자료)을 사용하는 방법을 배우고 있습니다.왜 분명히 잘못된 코드로 인해 irb에서 오류가 발생하지 않습니까?

현재 수행중인 실습에서 하나의 메서드로 클래스를 정의한 다음 메서드를 호출 해 줄 것을 요청합니다. 트릭은 주어진 코드가 분석해야하는 오류를 생성해야한다는 것입니다.

그러나 irb 콘솔에 코드를 입력해도 오류 메시지가 표시되지 않습니다. "TypeError : String으로 Fixnum의 암시 적 변환이 없습니다"라는 오류 메시지가 나타납니다. 나는 단지 ... 아무것도 얻지 않는다.

나는 이것이 간단하다고 확신하지만 "어떻게하면이 오류를 만들 수 있습니까?"(및 유사한) 불행히도 도움이되지 않습니다. 나는 바보 같은 느낌이 들기도한다. (즉, "이 코드를 어떻게 깰 수 있니?"),하지만 전체 프로세스를 이해하는 것이 중요하다. 여기서 나는 고군분투하고있다.

class ArgumentEchoer 
    def echo_argument(argument) 
    p "You just inputted a value: " + argument 
    end 
end 

instance = ArgumentEchoer.new 
instance.echo_argument(5) 

그리고 이것은 내 터미널에서 무엇을하고 무엇을 :

그래서이 오류 "Fixnum이라는의 암시 적 변환을 문자열로 형식 오류"를 생산해서는 안 무엇

natalieimac-3:~ tabalie$ irb 
irb(main):011:1> class ArgumentEchoer 
irb(main):012:2> def echo_argument(argument) 
irb(main):013:3>  p "You just inputted a value: " + argument 
irb(main):014:3> end 
irb(main):015:2> end 
irb(main):016:1> instance = ArgumentEchoer.new 
irb(main):017:1> instance.echo_argument(5) 
irb(main):018:1> 

아이디어가 있으십니까?

+1

정확히 뭘하려고 무엇을 분석 ?? Type # Error : Fixnum을 String으로 암시 적 변환하지 않습니다. – Surya

+0

내 irb 콘솔이 끊어졌습니다. 실제로 오류가 발생했습니다. (예 : 연습 문제입니다. 오류 메시지를 찾아내는 데);). – TaBalie

답변

0

질문을 다시 한 번 말하면 실제로 irb 콘솔에서 구문 오류가 발생했습니다. ^C 번을 몇 번 클릭하고 다시 시작하십시오. 실행하고 값을 반환해야

가) 프롬프트가 배태의 수준 (예를 들어 ...1>, ...2>) 및 B 포함되어 있기 때문에 당신은 말할 수) 라인은 IRB가 기다리고 있음을 나타내는 실행되지 않습니다 어떤 식의 구문 론적 끝이라도 당신이 중간에 있다고 생각합니다.

irb가 구문 오류에서 멈추었는지 확인하는 좋은 방법은 간단한 표현식을 입력하고 값 (=> 출력으로 표시)이 반환되는지 확인하는 것입니다. 다음은 가장 간단한 예는 다음과 같습니다

$ irb 
>> 1 
=> 1 
>> 

당신과 IRB는 구문 불일치에 붙어있는 경우, 반환 값받지 않습니다 : 다른

$ irb 
>> if 
?> 1 
>> 
+1

고맙습니다. 제시. irb 콘솔을 종료하고 다시 시작했는데 예상대로 정확하게 작동했습니다.또한, 정말 끝내 주셔서 감사합니다 : 내 irb가 끊어진 경우 알아 내 - ** 매우 도움이 **! 다시 한번 감사드립니다 :) – TaBalie

+0

@TaBalie 모험에 행운이 있기를! –

+0

'control-d '도 입력 스트림을 종료하므로'control-c'보다'안전 '할 수 있습니다. 다른 모든 것이 실패하면'control-z '하여 백그라운드에 놓고 프로세스를 종료 할 수 있습니다. IRB의 코드 편집은 편하지 않습니다. 보통 파일에'load 'filename.rb''라는 코드를 세션에 만들 수 있습니다. 로드를 사용하면 변경하려는 횟수만큼로드합니다. (require와 반대로, 파일을 다시로드하지 않고 false를 반환합니다. – vgoff

0

이런 경우에 사람이로 실행을 ...

나는 위의 조언에 따라 - 나는 irb 콘솔을 종료하고 다시 시작했다. 이제 제대로 작동합니다! 내 "진짜"할당에 지금에

- 결과 오류 :

irb(main):019:0> irb_exit 
natalieimac-3:~ tabalie$ irb 
irb(main):001:0> class ArgumentEchoer 
irb(main):002:1> def echo_argument(argument) 
irb(main):003:2>  p "You just inputted a value: " + argument 
irb(main):004:2> end 
irb(main):005:1> end 
=> nil 
irb(main):006:0> instance = ArgumentEchoer.new 
=> #<ArgumentEchoer:0x007fc2ac0572a8> 
irb(main):007:0> instance.echo_argument(5) 
TypeError: no implicit conversion of Fixnum into String 
    from (irb):3:in `+' 
    from (irb):3:in `echo_argument' 
    from (irb):7 
    from /usr/bin/irb:12:in `<main>' 
irb(main):008:0> 
관련 문제