任何人都不会使用的元组在红宝石?如果是这样,怎么可能一个实施一组?红宝石哈希好和工作几乎同样好,但是我真的很想看到的东西喜欢的元组类在蟒蛇,你在哪里可以使用 . 表示法找到价值。我想这使我可以创建一个实现的 D, 类似于 为蟒蛇。

有帮助吗?

解决方案

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

虽然这不是严格意义上的元组(不能做成员的点表示),您可以分配从列表中,这时候你是后常会解决红宝石是通过噪声值问题的变量列表返回值的列表。

E.g。

:linenum > (a,b,c) = [1,2,3]
:linenum > a
  => 1
:linenum > b
  => 2
:linenum > c
  => 3

我是作者 宝石红宝元组.

为您提供了两类:

  • 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")
 => #<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"

您可以做类似的东西与解构:

def something((a, b))
  a + b
end

p something([1, 2])

此打印出如预期3

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top