当前位置:  开发笔记 > 编程语言 > 正文

在Ruby中使用元组?

如何解决《在Ruby中使用元组?》经验,为你挑选了5个好方法。

有人在Ruby中使用元组吗?如果是这样,怎么可能实现一个元组?Ruby哈希很好并且工作得很好,但是我真的很想看到像Python中的Tuple类,你可以使用.符号来找到你正在寻找的值.我想要这个,这样我就可以创建一个D的实现,类似于Dee for Python.



1> 小智..:

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


这是一个糟糕的答案,只是一个链接?真的吗?如果/当链接断开时会发生什么?
np :)虽然回答你的问题:不,我不会在ruby中使用元组,作为openstructs或其他.我在高端使用类,在低端使用哈希:)
它甚至不是你在这里暴露的元组的概念.只是一个数据结构.无法理解您的解决方案是如何最受欢迎的
@JulesIvanic有效评论,但有时OP不知道如何正确地为问题制定标题,在这种情况下,这实际上是OP正在寻找的答案:)

2> Logan Capald..:

基于你谈论哈希和哈希的事实.符号我会假设你的意思是一种不同于(1. "a")排序的元组.你可能正在寻找Struct班级.例如:

Person = Struct.new(:name, :age)
me = Person.new
me.name = "Guy"
me.age =  30


@panesofglass,不需要任何名字:a = Struct.new(:name,:age).new; a.name ="盖伊"
在找到这些年之后,我可以确认`Person.new("Guy",30)`除了单独设置字段外还可以工作.

3> e_m0ney..:

虽然这不是严格意义上的元组(不能对成员进行点符号),但是您可以从列表中分配变量列表,这通常可以解决当您在列表之后将ruby作为值传递的问题.返回值.

例如

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



4> Kamil Lelone..:

我是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(只对) -它返回一个对应的元件

[] 这使您可以访问特定元素



5> Jules Ivanic..:

你可以用这个技巧模拟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"

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有