Ruby if else语句

时间:2017-11-13 12:05:52

标签: ruby conditional

我被要求:

  

使用名为first_longer_than_second的参数和另一个名为first的参数定义名为second的方法。如果传入的第一个单词大于或等于第二个单词的长度,则该方法将return true。否则returns false

这是我提出的代码:

def first_longer_than_second(first, second)
  if first >= second
      return true;
  else
      return false;
  end
end

我正在打电话:

first_longer_than_second('pneumonoultramicroscopicsilicovolcanoconiosis', 'k') #=> false
first_longer_than_second('apple', 'prune') #=> true

出于某种原因,在repl.it上我只得到输出false

我在平台上收到此错误消息,我实际上是要完成此任务:

expected #<TrueClass:20> => true
     got #<FalseClass:0> => false

Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
`expect(actual).to eq(expected)` if you don't care about
object identity in this example.

exercise_spec.rb:42:in `block (2 levels) in <top (required)>'

尝试了很多事情,但是看起来应该很简单的事情也很烦人......

1 个答案:

答案 0 :(得分:3)

  

使用名为first_longer_than_second的参数和另一个名为first的参数定义名为second的方法。如果传入的true字大于或等于first字的长度,则该方法将返回second。否则返回false

您的代码:

def first_longer_than_second(first, second)
  if first >= second
      return true;
  else
      return false;
  end
end

首先,您的代码不符合要求。他们要求比较两个论点的长度。 if条件应为:

if first.length >= second.length

请参阅String#length的文档。

关于Ruby的语法,不需要语句后面的分号(;)。就像在Javascript中一样,Ruby语句可以使用分号终止,也可以使用换行符终止。分号对于在同一行上分隔两个语句很有用。

接下来,与Javascript(以及许多其他语言)相同,您可以直接返回比较结果(而不是将其放入返回if / {{1的true语句中}}):

false

使其看起来像Ruby(而不是Javascript或PHP)的最后一项改进:Ruby函数返回它计算的最后一个表达式的值;这会使def first_longer_than_second(first, second) return first.length >= second.length end 关键字的存在变得多余。

您的代码应为:

return