Ruby数值类基础题

这是一道简单的入门级题目,计算给出半径的圆面积,我基础不好,所以在类型判断上遇到了一点问题。

##Ruby数值类基础题

原题地址在 codewars

因为需要对给入的半径值进行判断,但是Ruby中并没有typeof 这种操作符。 我查了一下,Ruby中可用的方法有以下几个 instance_of? 只能判断确切的类,而不是超类,比如 数字5,

5.instance_of? Fixnum #true
5.instance_of? Numeric #false

kind_of? 和 is_a? 是同义的,可以判断是否来自某个类的子类

5.kind_of? Numeric #true

借助这个方法,我写出的方法如下,其中遇到了一个问题是PI,在Ruby中不能像js中使用Math.PI那样获取类中的常量,而是使用::

def circle_area r
  if !(r.kind_of? Numeric) || (r<=0)
     false
  else
    (Math::PI * r**2).round(2)
end
end

最优的解决方法如下


def circle_area r
  r.to_f > 0 ? (Math::PI * r * r).round(2) : false
end

Written on August 21, 2015