سؤال

لا أحد استخدام الصفوف في روبي ؟ إذا كان الأمر كذلك ، كيف يمكن للمرء أن ينفذ tuple?روبي التجزئة هي لطيفة و العمل تقريبا ، ولكن أود حقا أن نرى شيئا مثل Tuple الدرجة في بيثون ، حيث يمكنك استخدام . تدوين للعثور على القيمة التي كنت تبحث.أنا أريد هذا حتى أستطيع أن إنشاء تطبيق 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

نصائح أخرى

واستنادا إلى حقيقة أن تتحدث عن التجزئة و. تدوين انا ذاهب الى تولي تقصد نوعا مختلفا من الصفوف (tuple) من نوع (1. "a"). ربما كنت تبحث عن الطبقة Struct. على سبيل المثال:

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

ولئن كان هذا ليس حصرا الصفوف (tuple) (لا تستطيع أن تفعل نقطة تدوين الأعضاء)، يمكنك تعيين قائمة من المتغيرات من القائمة، التي غالبا ما حل القضايا مع روبي يجري تمرير كل قيمة عندما كنت بعد قائمة القيم العودة.

ومنها مثلا.

: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 (إلا على زوج) - والتي ترجع العناصر المقابلة
  • [] هذا يتيح لك الوصول إلى عناصر معينة

ويمكنك يسخرون من سكالا الصفوف مع هذه الحيلة:

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