加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby Koans的三角形的更优雅的解决方案

发布时间:2020-12-16 20:06:20 所属栏目:百科 来源:网络整理
导读:我已经通过 Ruby Koans工作,并将其作为about_triangle_project.rb,您需要在其中编写方法三角形的代码. 这些项目的代码在这里找到: https://github.com/edgecase/ruby_koans/blob/master/koans/about_triangle_project.rb https://github.com/edgecase/ruby_
我已经通过 Ruby Koans工作,并将其作为about_triangle_project.rb,您需要在其中编写方法三角形的代码.

这些项目的代码在这里找到:

https://github.com/edgecase/ruby_koans/blob/master/koans/about_triangle_project.rb

https://github.com/edgecase/ruby_koans/blob/master/koans/triangle.rb

在triangle.rb中,我创建了以下方法:

def triangle(a,b,c)
  if ((a == b) && (a == c) && (b == c))
    return :equilateral
  elsif ((a == b) || (a == c) || (b == c))
    return :isosceles
  else
    return :scalene
  end
end

我从阅读Chris Pine的“学习计划”中知道,总是有不止一种做事的方法.虽然上面的代码工作,我不禁想到有一个更优雅的方式来做到这一点.有人会愿意提出他们的想法,说明如何使这种方法更加高效和紧凑?

我很好奇的另一件事是,为了确定一个等边三角形,我无法创建(a == b == c)的条件.这是一个等边三角形的证明 – 我的母亲,一个前几何老师说的一样 – 但是Ruby讨厌了语法.有没有一个简单的解释为什么这是?

谢谢你的时间和回应!

解决方法

有一个简单的解释为什么是:

==在Ruby中是一个运算符,它执行一个特定的功能.运算符具有确定它们应用的顺序的规则,所以例如,2 == 3在相等检查之前评估加法.但是一次只能对一个运算符进行评估.相互之间有两个等式检查是没有意义的,因为等式检查计算结果为true或false.有些语言允许这样做,但是它仍然无法正常工作,因为那么如果a和b是相等的,那么你将会评估true == c,这显然不是真的,即使是数学上的一个== b == c.

至于更优雅的解决方案:

case [a,c].uniq.size
when 1 then :equilateral
when 2 then :isosceles
else        :scalene
end

或者甚至更简单(但可读性较差):

[:equilateral,:isosceles,:scalene].fetch([a,c].uniq.size - 1)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读