设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2117|回复: 2
打印 上一主题 下一主题

[已经解决] 能否新建一个数据类型?

[复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
跳转到指定楼层
1
发表于 2015-9-12 14:30:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20950
在线时间
9333 小时
注册时间
2012-6-19
帖子
7106

开拓者短篇九导演组冠军

来自 2楼
发表于 2015-9-12 15:43:46 | 只看该作者
本帖最后由 喵呜喵5 于 2015-9-12 15:48 编辑

RUBY 代码复制
  1. class Fraction
  2.   attr_accessor :numerator, :denominator  
  3.   def initialize(array)
  4.     @numerator = array[0].to_i   
  5.     @denominator = array[1].to_i
  6.     raise "分母不为0" if @denominator == 0
  7.     reduction
  8.   end
  9.   # 极其简陋的约分(破坏性)
  10.   def reduction
  11.     @denominator = 1 if @numerator == 0
  12.     [@denominator, @numerator, 2, 3, 5, 7].each do |i|
  13.       next if i == 1 || i == -1 || i == 0
  14.       while @numerator % i == 0 && @denominator % i == 0        
  15.         @denominator /= i; @numerator /= i
  16.       end
  17.     end
  18.     self
  19.   end
  20.   # 取负数(破坏性)
  21.   def -@; self.numerator = -self.numerator; self; end
  22.   # 取倒数(破坏性)
  23.   def reciprocal
  24.     self.numerator ,self.denominator = self.denominator, self.numerator
  25.     self
  26.   end  
  27.   # 将整数转换为分数
  28.   def change_to_fraction(number)
  29.     return Fraction.new([number,1]) if number.class != Fraction
  30.     number
  31.   end
  32.   # 加
  33.   def +(number)
  34.     r = self.clone
  35.     n = change_to_fraction(number)
  36.     r.numerator *= n.denominator
  37.     r.numerator += n.numerator * r.denominator
  38.     r.denominator *= n.denominator   
  39.     r.reduction   
  40.   end
  41.   # 乘
  42.   def *(number)
  43.     n = change_to_fraction(number)
  44.     r = self.clone
  45.     r.denominator *= n.denominator
  46.     r.numerator *= n.numerator
  47.     r.reduction
  48.   end
  49.   # 减
  50.   def -(number); self.+(-number); end
  51.   # 除
  52.   def /(number); self.*(change_to_fraction(number).reciprocal); end
  53.  
  54.   # 数据类型的转换
  55.   def to_f; @numerator.to_f / @denominator; end
  56.   def to_i; @numerator / @denominator; end
  57.   def to_s
  58.     return @numerator.to_s if @denominator == 1
  59.     "#{@numerator}/#{@denominator}"
  60.   end
  61. end
  62.  
  63.  
  64. a = Fraction.new([1,4])
  65. b = Fraction.new([2,3])
  66.  
  67. p a + b
  68. p a - 1
  69. p b * 3
  70. p b / a

点评

所以这段代码里确实没用上嘛  发表于 2015-9-12 18:56
1 + Fraction.new([1, 4])  发表于 2015-9-12 17:41
这段代码里又用不上……  发表于 2015-9-12 16:46
不定义 coerce 么  发表于 2015-9-12 16:40
牛!  发表于 2015-9-12 15:54

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
595
在线时间
899 小时
注册时间
2010-11-13
帖子
1023
3
发表于 2020-6-6 21:56:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-27 05:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表