为什么这个明显错误的代码在irb中没有产生错误?

时间:2014-11-10 05:04:27

标签: ruby typeerror irb

我刚开始成为一名Full Stack Developer,我正在学习如何快速使用命令行,基本的Ruby语法等(初学者的东西!)。

我正在进行的当前练习要求我使用单个方法定义一个类,然后调用该方法。诀窍是给定的代码应该产生一个错误,我应该分析。

但是,即使给我输入我的irb控制台的代码,我也没有收到错误消息(我应该收到错误“TypeError:没有将Fixnum隐式转换为String”)。我只是......没什么。

我确信这很简单,但谷歌搜索“我怎么做出这个错误”(和类似的)遗憾的是没有帮助。我甚至觉得很愚蠢(即“我如何让这段代码破解?”),但重要的是我理解整个过程,在这里我很挣扎。

所以这就是应该产生错误“TypeError:没有将Fixnum隐式转换为String”:

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

instance = ArgumentEchoer.new
instance.echo_argument(5)

这就是我在终端中所做的事情:

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> 

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

重读您的问题,看起来您实际上只是陷入了irb控制台中的语法错误。点击^C几次然后重新开始。

您可以告诉我,因为 a)提示包含嵌入级别(例如...1>...2>)和 b)这些行应该执行并且返回的值没有执行,表明irb正在等待它认为你在中间的任何表达式的句法结束。

判断你的irb是否挂起语法错误的一个好方法就是尝试输入任何简单的表达式,看看它是否返回一个值(由=>输出表示)。这是最简单的例子:

$ irb
>> 1
=> 1
>>

如果您和irb陷入语法分歧,您将无法获得返回值:

$ irb
>> if
?> 1
>>

答案 1 :(得分: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>