在Ruby中使用元组?
有没有人在Ruby中使用元组? 如果是这样,怎么可能实现一个元组? Ruby哈希很好,工作也差不多,但是我真的很想看到像Python中的Tuple类,你可以使用它.
记法来find你正在寻找的价值。 我想要这个,所以我可以创build一个D的实现,类似于Python的Dee 。
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")
types的元组。 您可能正在寻找Struct
类。 例如:
Person = Struct.new(:name, :age) me = Person.new me.name = "Guy" me.age = 30
虽然这不是严格的元组(不能做成员的点符号),但是你可以从列表中分配一个variables列表,当你在列表后面的时候,通常会解决ruby被传递的问题。返回值。
例如
:linenum > (a,b,c) = [1,2,3] :linenum > a => 1 :linenum > b => 2 :linenum > c => 3
我是Ruby元组的gem的作者。
你有两个课程:
- 一般的
Tuple
-
Pair
特别
你可以用不同的方式初始化它们:
Tuple.new(1, 2) Tuple.new([1, 2]) Tuple(1, 2) Tuple([1, 2]) Tuple[1, 2]
这两个类都有一些辅助方法:
-
length
/arity
– 返回元组内值的个数 -
first
/last
/second
(只有一对) – 它返回一个相应的元素 -
[]
,让您访问特定的元素
你可以做类似解构的事情:
def something((a, b)) a + b end p something([1, 2])
如预期的那样打印出3
。
你可以用这个技巧来嘲笑Scala元组:
Tuple = Struct.new(:_1, :_2) 2.2.5 :003 > t = Tuple.new("a", "b") => #<struct Tuple _1="a", _2="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") => #<struct Tuple _1="a", _2="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 => #<struct Tuple _1="a", _2="b"> 2.2.5 :006 > a => "a" 2.2.5 :007 > b => "b"