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

如何用Ruby编写返回字符串的块

  •  0
  • umar  · 技术社区  · 16 年前

    函数将字符串作为参数,例如fn(“string”)。

    我想根据三个以上的条件传递不同的值,其中一个稍微不可读的方法是:

    fn(check_1 ? "yes" : check_2 ? "no" : "maybe")
    

    我想用返回字符串的块替换参数。我希望我能做点什么:

    fn({|arg| if check_1 
        arg = "yes"
      elsif check_2
        arg = "no"
      else 
        arg = "maybe"
      end
    })
    

    我可以有更多的条件,并且仍然可以把这一切写成一行。

    我怎么用红宝石做这个?

    5 回复  |  直到 11 年前
        1
  •  1
  •   cgr    16 年前

    这听起来有点奇怪。是否确实不想传入数组并从方法内处理参数?

    不管怎样,听起来你所要求的是一个lambda来处理逻辑,然后你可以将lambda传递到函数中以返回实际的结果。

    def test(parameter)
      puts "I was passed the value: #{parameter}"
    end
    
    foo = lambda{|x,y,z|
    if x == true
    "yes"
    elsif y == true
    "no"
    else
    "maybe"
    end
    }
    
    test(foo[false,true,false])
    
        2
  •  3
  •   pierrotlefou    16 年前

    块很酷,但这并不意味着我们总是要使用它。

    imho,使用单独的函数来获取要传递给 fn .

     def arg w
        if w.eql? "check_1"
                "yes"
        elsif w.eql? "check_2"
                "no"
        else
                "maybe"
        end
     end
    
    def fn s
         puts s
    end
    
    fn(arg("check_1"))
    fn(arg("check_2"))
    fn(arg("check_3"))
    

    或使用 Hash ,作为练习留给您:)

        3
  •  1
  •   jqno    16 年前

    你可以使用 if 表达式,甚至是 case 表达式。见 the PickAxe book . 您想要做的一个例子就是一直在页面的顶部。

        4
  •  1
  •   marocchino    16 年前
    arg= check_1&&"yes"||check_2&&"no"||"maybe"
    
        5
  •  1
  •   Mereghost    16 年前

    似乎你对街区有一些误解,但这完全是另一回事。

    我认为这对你有帮助:

    check_1 = false
    check_2 = true
    
    def foo(&block)
      puts block.call
    end
    
    foo { 
      if check_1 
        arg = "yes"
      elsif check_2
        arg = "no"
      else 
        arg = "maybe"
      end
    }
    
    推荐文章