【问题标题】:How to access a property of an array in Ruby如何在 Ruby 中访问数组的属性
【发布时间】:2010-02-02 18:26:34
【问题描述】:

我有这个数组类的对象

    >> 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>]

为了进行二进制检查,我需要访问 success 字段。我不确定我是否在这里使用了正确的术语,所以我无法搜索如何访问它。

answer_to_problems 是这样找到的:

answers_to_problem = Answer.find_all_by_problem_id_and_player_id(current_problem,player_id)

最终,我想做这个检查:

is_correct = (answers_to_problem.success == true) 

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:

    这不是数组的属性——它是数组in对象的属性。所以你需要answers_to_problem[0].success 来访问数组第一个对象的success 属性。

    【讨论】:

    • 它是一个对象数组,尽管它是一个“标量”。所以,这就是在很小的范围内开悟的感觉!
    【解决方案2】:

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

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

    您可以使用answers.all?(&amp;:success) 执行前者,而使用answers.any?(&amp;:success) 执行后者。

    【讨论】:

    • 对于这种情况,可能有多个结果。上面的检查还有更多,首先我检查长度是否== 1。如果是,那么我检查是否成功。我实际上都需要。您的解决方案适用于我遇到的许多相关问题!
    【解决方案3】:

    这里有点问题,但是:

    is_correct = (answer_to_problem.success == true)
    

    在这里,您正在执行一项并非真正需要的任务和真实性检查。 is_correct 在这里只是反映了 answer_to_problem.success 会是什么。缩短:

    answer_to_problem.success == true
    

    现在您仍在执行比较以获取您已经拥有的布尔值。缩短:

    answer_to_problem.success
    

    您可以像使用is_correct 一样使用一个语句。为了使其阅读效果更好,您可以这样做:

    class Answer
      def correct?
        success
      end
    end
    

    只需使用answer_to_problem.correct?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多