有人在Ruby中使用元组吗?如果是这样,怎么可能实现一个元组?Ruby哈希很好并且工作得很好,但是我真的很想看到像Python中的Tuple类,你可以使用.
符号来找到你正在寻找的值.我想要这个,这样我就可以创建一个D的实现,类似于Dee for Python.
OpenStruct?
简要示例:
require 'ostruct' person = OpenStruct.new person.name = "John Smith" person.age = 70 person.pension = 300 puts person.name # -> "John Smith" puts person.age # -> 70 puts person.address # -> nil
基于你谈论哈希和哈希的事实.符号我会假设你的意思是一种不同于(1. "a")
排序的元组.你可能正在寻找Struct
班级.例如:
Person = Struct.new(:name, :age) me = Person.new me.name = "Guy" me.age = 30
虽然这不是严格意义上的元组(不能对成员进行点符号),但是您可以从列表中分配变量列表,这通常可以解决当您在列表之后将ruby作为值传递的问题.返回值.
例如
:linenum > (a,b,c) = [1,2,3] :linenum > a => 1 :linenum > b => 2 :linenum > c => 3
我是Gem for Ruby元组的作者.
您将获得两个课程:
Tuple
一般来说
Pair
特别是
您可以通过不同方式初始化它们:
Tuple.new(1, 2) Tuple.new([1, 2]) Tuple(1, 2) Tuple([1, 2]) Tuple[1, 2]
这两个类都有一些辅助方法:
length
/ arity
- 返回元组内的值的数量
first
/ last
/ second
(只对) -它返回一个对应的元件
[]
这使您可以访问特定元素
你可以用这个技巧模拟Scala元组:
Tuple = Struct.new(:_1, :_2) 2.2.5 :003 > t = Tuple.new("a", "b") => #2.2.5 :004 > t._1 => "a" 2.2.5 :005 > t._2 => "b"
但在这里你不能解构:
2.2.5 :012 > a, b = t => {:_1=>"a", :_2=>"b"} 2.2.5 :013 > a => {:_1=>"a", :_2=>"b"} 2.2.5 :014 > b => nil
但是由于这个技巧:https://gist.github.com/stevecj/9ace6a70370f6d1a1511 解构将起作用:
2.2.5 :001 > Tuple = Struct.new(:_1, :_2) => Tuple 2.2.5 :002 > t = Tuple.new("a", "b") => #2.2.5 :003 > t._1 => "a" 2.2.5 :004 > class Tuple ; def to_ary ; to_a ; end ; end => :to_ary 2.2.5 :005 > a, b = t => # 2.2.5 :006 > a => "a" 2.2.5 :007 > b => "b"