52


7

Rubyでタプルを使う?

Rubyでタプルを使う人はいますか? もしそうなら、どのようにタプルを実装することができますか? Rubyハッシュは素晴らしく、ほぼ同じように動作しますが、私はPythonのTupleクラスのようなものを見たいのです。 Deeに似たhttps://rads.stackoverflow.com/amzn/click/ com / 0321399420[Dの実装を作成できるようにこれを望んでいます。 ] Python用。

6 Answer


45


http://www.ruby-doc.org/stdlib/libdoc/ostruct/rdoc/classes/OpenStruct.html[OpenStruct]?

簡単な例:

'ostruct'が必要

person = OpenStruct.new person.name = "John Smith" person.age = 70 person.pension = 300

person.name# - > "John Smith"を置くperson.age# - > 70を置くperson.address# - > nil


25


あなたがハッシュについて話すという事実に基づいて。 表記法私は、あなたが `(1。 「a」) `ソート。 おそらく、 `+ Struct +`クラスを探しているでしょう。 eg:

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


12


これは厳密にはタプルではありませんが(メンバーのドット表記をすることはできません)、リストから変数のリストを割り当てることができます。戻り値

例えば。

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


7


私はhttps://github.com/KamilLelonek/ruby-tuples [Rubyタプルのための宝石]の作者です。

次の2つのクラスがあります。

  • 一般に + 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


このトリックでScalaのタプルをモックすることができます:

タプル= 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>タプル= Struct.new(:_ 1、:_ 2)=>タプル2.2.5:002> t = Tuple.new( "a"、 "b")=>#2.2.5:003> t._1 => "a" 2.2.5:004>クラスタプル。 def to_ary; to_a;終わり ; end =>:to_ary 2.2.5:005> a、b = t =>#2.2.5:006> a => "a" 2.2.5:007> b => "b"


3


破壊と似たようなことができます。

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

p something([1, 2])

これにより、期待どおりに「3」が出力されます。