Массивы Ruby - невозможно получить доступ к значению - PullRequest
1 голос
/ 11 апреля 2009

Итак, я делаю небольшой, простой проект для своего класса и по какой-то причине не могу получить доступ к значению с помощью переменной.

Это мой класс: (у меня проблемы с методом getAnswer, в частности с массивом answerArray)

#Create random fact array
class RandomFact
    def initialize()
        @randomNum = rand(5)
    end

    def getQuestion
        randomNum = @randomNum
        questionArray = Array.new
        questionArray[0] = "Do you liek mudkipz?"
        questionArray[1] = "Question2"
        questionArray[2] = "Three"
        questionArray[3] = "Reddit"
        questionArray[4] = "4chan"

        puts questionArray[randomNum]
        return randomNum
    end

    def getAnswer(randomNum,answer)
        answerArray = Array.new
        answerArray[0] = "one"
        answerArray[1] = "two"
        answerArray[2] = "three"
        answerArray[3] = "four"
        answerArray[4] = "five"

        return answerArray[randomNum]
    end

end

Это мой класс в классе:

    randomNum = cgi['randomNum']
    answer = cgi['answer']
    puts newQuestion.getAnswer(randomNum,answer)

Теперь дело в том, что randomNum содержит значение из предыдущей формы. Если я распечатаю randomNum прямо под тем местом, где я получаю значение из формы, я его получаю.
Если я распечатываю randomNum внутри метода getAnswer, я получаю его.
Если я распечатываю answerArray [0], то я получить значение.
Если я распечатываю answerArray [randomNum], я ничего не получаю.



Это в значительной степени точная копия метода getQuestion сверху, и он работает. Любой вход?

Ответы [ 5 ]

1 голос
/ 11 апреля 2009

Случайное число, вероятно, поступает в виде строки из вашего CGI. Приведите его к целому числу, используя randomNum.to_i, и все будет установлено.

0 голосов
/ 11 апреля 2009

В вашем коде есть несколько вещей, которые выглядят нерегулярно.

Описание вопросов и ответов в двух отдельных массивах - это проблема, независимо от того, как вы ее разрезаете. Лучше всего определить их в простом согласованном массиве массивов, а затем выбрать один из этих элементов, используя встроенный метод Array # rand, который выберет один из них случайным образом.

Например


  class RandomFact
    QUESTIONS = [
      [ 'How many nuts can a squirrel eat?', '2' ],
      [ 'What is my favorite color?', 'blue' ]
    ]

    def self.rand
      QUESTIONS.rand
    end
  end

  (question, answer) = RandomFact.rand

  puts "Question: #{question}"
  puts "Answer: #{answer}"

0 голосов
/ 11 апреля 2009

Вы где-нибудь инициализируете newQuestion? В приведенном вами примере это будет ноль.

Пара не относящихся к вопросу лакомых кусочков: вам не нужно выражение return. Ruby всегда возвращает последнее значение. Просто поместите ценность там самостоятельно. А в Ruby стандартная практика - записывать переменные как new_question, а не newQuestion.

0 голосов
/ 11 апреля 2009

Я не уверен, что вы на самом деле пытаетесь сделать здесь, но если вы на самом деле пытаетесь делать только то, что показывает ваш пример, вам не нужно создавать классы и функции. Один набор вопросов и ответов будет отлично работать.

QA = [
  ["What is the capital of Estonia?","Tallinn"],
  ["How many times to 6 go into 18?","3"],
  ["What have I got in my pocket?","The Ring"]
]

qnum = cgi["qnum"].to_i
question = QA[qnum].first
answer = QA[qnum].last
0 голосов
/ 11 апреля 2009

Это должен быть ваш вклад. Когда я попробовал это в irb, у меня это сработало.

>> new_q = RandomFact.new
=> #<RandomFact:0x41028e74 @randomNum=2>
>> new_q.getQuestion
Three
=> 2
>> new_q.getAnswer(2, "")
=> "three"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...