0
A
回答
3
红宝石不允许类型所有,至少不是在你似乎可以用单词“类型”的意义。因此,它显然不支持产品类型。 Ruby是一种所谓的“动态类型”语言(使用单词“type”的实用,程序员行话定义)或一种无类型语言(使用数学类型定义),所以在谈论“产品类型“根本没有任何意义。
或者,如果您愿意,您可以将动态类型语言看作静态类型语言,只有一种类型,即所有动态类型的总和类型。
但是,你可以明显构造值是将有一个产品类型,如果红宝石在所有有各类:
class Tuple
include Enumerable; include Comparable
class << self
alias_method :[], :new
def call(length)
class_name = :"Tuple#{length}"
return const_get class_name if const_defined? class_name
const_set class_name, Class.new(self) {
(@length = length).times do |i| define_method :"_#{i+1}" do @ary[i] end end
}
end
end
def to_s; "(#{@ary.join(', ')})" end
def inspect; "#<#{self.class} (#{@ary.map(&:inspect).join(', ')})>" end
def to_a; @ary.dup end
def [](*args) @ary[*args] end
def each(*args, &block) @ary.each(*args, &block) end
def <=>(other)
raise TypeError unless other.is_a? self.class
raise TypeError unless each_with_index.all? {|el, i| other.instance_variable_get(:@ary)[i].instance_of?(el.class) }
map.with_index {|el, i| el <=> other.instance_variable_get(:@ary)[i] }.find(0) {|cmp| !cmp.zero? }
end
def initialize(*args)
raise ArgumentError unless args.length == self.class.instance_variable_get(:@length)
(@ary = args).freeze
end
end
这会给你一个方法来构建n元组,这当然是产品类型的特例。例如,这样的:
t3 = Tuple.(3)[1, :two, 'three']
将构造与元组类型(Fixnum, Symbol, String)
,这是产品类型Fixnum × Symbol × String
的特例一个三元组。但是没有办法在Ruby中表示和/或强制执行这些类型。
如果您想深入研究Ruby的类型系统,Diamondback Ruby项目是一个很好的起点。它包括元组类型,例如,这是产品类型的一个实例。
相关问题
- 1. 获得笛卡尔产品
- 2. 笛卡尔产品列表
- 3. neo4j笛卡尔产品性能改进
- 4. PHP笛卡尔产品和标签
- 5. 使用加入笛卡尔产品
- 6. 可逆笛卡尔产品元素/索引转换函数
- 7. 埃尔卡皮坦+红宝石/酿造/主要问题
- 8. 红宝石宝石是否或依赖?
- 9. 在红宝石中有多个构造函数
- 10. 红宝石显示删除产品=用户产品
- 11. 是否允许constexpr构造函数返回语句?
- 12. 是否允许在构造函数中创建新变量
- 13. 撬宝石不工作的红宝石2它卡住了
- 14. 红宝石递归函数
- 15. 红宝石变函数
- 16. 红宝石类收藏品
- 17. 红宝石1.9 - 宝石在那里,但它说它不是?
- 18. 红宝石Javascript和资产
- 19. 产生对红宝石
- 20. 笛卡尔产品和从条款中选择
- 21. Power set和笛卡尔积python的产品
- 22. 如何通过Linq从笛卡尔产品中删除对称?
- 23. MS Access的SQL - 多个连接与AND给笛卡尔产品?
- 24. 如何将笛卡尔产品留在另一张桌子上?
- 25. 如何在RavenDB中做交叉连接/笛卡尔产品?
- 26. 触发器@执行计划..笛卡尔产品
- 27. 红宝石中是否有基数函数?
- 28. 笛卡尔积
- 29. 什么是构造红宝石的现代方式?
- 30. 产卵与红宝石参数
它允许吗?是。它是否在标准库中实现?可能不会,但执行起来并不困难 – Chubas 2010-10-27 17:13:21
@Chubas:我认为“执行起来并不困难”是一种“粗暴”的轻描淡写。在实现产品类型之前,首先必须实现一个类型系统,尽管[Diamondback Ruby](http://WWW.CS.UMD.Edu/projects/PL/druby/)项目的工作非常出色,那可能仍然是一个博士级多年研究项目。 – 2010-10-28 09:53:34
那么,Trevor真的想要什么? (除此之外,当然,从一个正确的教训,事实上类型真的不是他认为他们是......) – 2010-10-28 21:59:16