استخدام الصفوف في روبي ؟
-
22-08-2019 - |
سؤال
المحلول
ومثال موجز:
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
كما هو متوقع.