سؤال

لقد بدأت للتو في تعلم Ruby وقد كتبت برنامجًا يقوم بإنشاء بعض الأرقام ويعينها للمتغيرات @One و Two و @Three وما إلى ذلك. يمكن للمستخدم تحديد متغير لتغييره عن طريق إدخال اسمه (على سبيل المثال واحد). أحتاج بعد ذلك إلى القيام بشيء مثل "@[valuefinout] = ASD". كيف يمكنني القيام بذلك ، وهل هناك طريقة أفضل لأن الطريقة التي أفكر بها تبدو محبطًا؟ لقد وجدت

x = "myvar"
myvar = "hi"
eval(x) -> "hi"

لكنني لا أفهم تمامًا سبب الحاجة إلى السطر الثاني. في حالتي ، سأستخدم شيئًا مثل

@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
هل كانت مفيدة؟

المحلول

يستخدم instance_variable_set (روبيوك)

instance_variable_set("@" + varname, value)

في معظم الحالات ، يجب عليك فصل متغيرات Ruby العادية عن المتغيرات التي يتفاعل معها المستخدم. ماذا عن إنشاء تجزئة من متغيرات المستخدم ، على سبيل المثال

@uservars = { 'one' => 1, 'two' => 2 }
two = @uservars['two']   # Look up 'two' variable

varname = "myvar"
@uservars[varname] = 5   # Set a variable by name
value = @uservars[varname]  # Get a variable by name 

نصائح أخرى

يمكن استرداد متغيرات المثيل عبر هذه الطريقة:

input = instance_variable_get("@one")

بعد ذلك ، في حالتك سيكون لديك input يساوي "21".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top