【问题标题】:Getting an Array from Return statement, deduce a string from that从 Return 语句中获取一个数组,从中推导出一个字符串
【发布时间】:2015-07-26 09:49:27
【问题描述】:

我有一个“案例”条件代码 sn-p,其中我要返回两个对象。 伪代码是 -

case name
when 'a'
object1 = - SQL Logic -
when 'b'
object1 = - SQL Logic -
when 'c'
object2 = - SQL Logic -
when 'd'
object2 = - SQL Logic - 
end
return object1, object2

显然,我返回了两个对象。但是,在我的控制器中,我一次需要一个对象。对象以数组的形式返回,例如 ['value', 'nil']。其中之一始终为零。 在我的控制器中,我将这些对象之一作为 -

Model.find_by_sql ["select * from #{object}"]  #either object1 or object2

有什么方法可以断开这个数组并将那个地方需要的对象作为字符串返回?

谢谢。

【问题讨论】:

    标签: sql ruby-on-rails arrays ruby return


    【解决方案1】:

    虽然您可以使用 compact 从数组中消除 nil 值,但我不确定您为什么首先需要它。

    在做

    case name
      when 'a'
        return "SQL statement"
      when 'b'
        return "SQL statement"
      when 'c'
        return "SQL statement"
      when 'd'
        return "SQL statement"
    end
    

    更直观。

    【讨论】:

    • 你能否也向我解释一下为什么如果我试图访问返回的对象之一,比如说 object1 ,它单枪匹马地表现为一个数组。比如,object1 - ['value', nil] ?
    • 它的行为就像一个数组,因为你返回一个数组。当您返回两个值时,它们会被放入一个数组中。
    • 感谢您的解释:)
    • case,而不是“案例”。 (总是测试!)考虑case name; when 'a','b','c','d' then return "SQL statement"; endreturn "SQL statement" if ['a','b','c','d'].include?(name)。 ——
    • 是的,感谢您指出它..这实际上是一个错字..现在已经更正了。 @CarySwoveland
    【解决方案2】:

    return [object1, object2].compact

    您可以使用compact 方法删除数组的nil 值。

    【讨论】:

      【解决方案3】:

      你可以写:

      return (['a', 'b'].include?(name) && - SQL Logic 1 -) ||
               (['c', 'd'].include?(name) && - SQL Logic 2 -)
      

      如果是方法的最后一行,则不需要return

      让我们看看发生了什么。

      如果['a', 'b'].include?(name) #=> true- SQL Logic 1 -,为真,将返回。

      如果['a', 'b'].include?(name) #=> false,第一个&&子句是false- SQL Logic 1 -没有被执行),所以我们考虑另一个||子句。 ['c', 'd'].include?(name) 必须为真,所以我们返回 - SQL Logic 2 -

      【讨论】:

        猜你喜欢
        • 2020-04-28
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2013-03-01
        • 2015-02-08
        相关资源
        最近更新 更多