Bir nümunə dəyişəninin dəyərini alın, adını verin

Ümumiyyətlə, məndə adı olan bir obyektə bir keçid əldə edə bilərəm?

Xüsusilə, parametr adlarının siyahısı var (üzv dəyişənlər dinamik şəkildə qurulur, ona görə də mən onlara birbaşa daxil ola bilmərəm).

Hər bir parametr, bir from_s üsulu olan bir from_s .

Aşağıdakı kimi bir şey etmək istəyirəm (əlbəttə ki, işləmir):

 define_method(:from_s) do | arg | @ordered_parameter_names.each do | param | instance_eval "field_ref = @#{param}" field_ref.from_s(param) end end 
81
02 июля '09 в 17:30 2009-07-02 17:30 LK__ İyul 02 '09 saat 17: 30-da təyin olundu 2009-07-02 17:30
@ 2 cavablar

Buna nail olmaq üçün ən çox idik yol:

 some_object.instance_variable_get("@#{name}") 

+ intern ehtiyac yoxdur; Ruby bu cür yaxşı işləyəcək. Ancaq başqa bir obyektə düşsən və İvara'yı çıxararsan, encapsulation pozduğunuz üçün çox yaxşı bir şans var.

İrəvana açıq bir şəkildə daxil olmaq istəyirsinizsə, bunu mümkün etmək lazımdır. Aşağıdakıları nəzərdən keçirin:

 class Computer def new(cpus) @cpus = cpus end end 

Bu halda, Computer.new @cpus üçün bir instance_variable_get @cpus . Amma bunu edərsən, ehtimal ki, @cpus üçün ictimaiyyətə açıq olmaq deməkdir. Nə etməlisiniz:

 class Computer attr_reader :cpus end 

İndi Computer.new(4).cpus edə bilərsiniz.

Xahiş edirik mövcud sinifləri yenidən aça və oxucuda xüsusi bir ivar edə bilərsiniz. Accessor yalnız bir üsul olduğundan, Computer.new(4).send(var_that_evaluates_to_cpus) edə bilərsiniz Computer.new(4).send(var_that_evaluates_to_cpus)

154
03 июля '09 в 6:43 2009-07-03 06:43 Cavab Yehuda Katz tərəfindən 03 iyul '09 saat 06:43 'da verildi. 2009-07-03 06:43

Bir nümunə değişkeninin bir örnek değişkeni adı almaq üçün çalıştırın:

 name = "paramName" instance_variable_get(("@" + name).intern) 
border=0

Bu, @paramName Məsələn dəyişəninin dəyərini qaytaracaq @paramName

7
02 июля '09 в 17:35 2009-07-02 17:35 Cavab Daniel Lucraft'a 02 iyul 2009 tarixində 17: 35-da verilmişdir

Tags və ya sual bir sual haqqında digər suallar