代码之家  ›  专栏  ›  技术社区  ›  MatlabDoug

如何在Ruby中访问数组的属性

  •  1
  • MatlabDoug  · 技术社区  · 14 年前

    我有一个类数组的对象

        >> answers_to_problem
    => [#<Answer id: 807, problem_id: 1, player_id: 53, code: "function y = times2(x
    )\r\n  y = 2*x;\r\nend", message: nil, score: 12, output: nil, hide: nil, create
    d_at: "2010-02-02 11:06:49", updated_at: "2010-02-02 11:06:49", correct_answer:
    nil, leader: nil, success: true, cloned_from: nil>]
    

    要进行二进制检查,我需要访问 领域我不确定我在这里是否使用了正确的术语,因此我无法搜索如何访问它。

    通过以下方式找到问题的答案:

    answers_to_problem = Answer.find_all_by_problem_id_and_player_id(current_problem,player_id)
    

    最后,我想做这个检查:

    is_correct = (answers_to_problem.success == true) 
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Chuck    14 年前

    这不是数组的属性,而是对象的属性 在里面 阵列。所以你会这么做 answers_to_problem[0].success 访问 success

        2
  •  2
  •   sepp2k    14 年前

    你确定要使用find_all吗?如果您知道您只能得到一个答案,那么应该使用find而不使用all。这样就得到了一个单一的应答对象,而不是数组。

    如果您可以返回多个答案,您是要检查所有答案是否成功,还是只检查其中一个是否成功?

    answers.all?(&:success) answers.any?(&:success) .

        3
  •  2
  •   runeb    14 年前

    这有点超出了问题的范围,但是:

    is_correct = (answer_to_problem.success == true)
    

    在这里,你正在做一个作业和一个事实检查,这并不是真正需要的。 is_correct answer_to_problem.success 是的。缩短:

    answer_to_problem.success == true
    

    现在,您仍然在执行一个比较,以获得一个已经存在的布尔值。缩短:

    answer_to_problem.success
    

    你说得对吗

    class Answer
      def correct?
        success
      end
    end
    

    只要使用 answer_to_problem.correct?