我有一个方法,可以决定在map函数中返回什么.我知道这可以通过分配一个变量来实现,但我认为我可以这样做;

def some_method(array)
    array.map do |x|
      if x > 10
         return x+1 #or whatever
      else
         return x-1
      end
    end
end

这并不像我预期的那样有效,因为第一次命中return时,它会从方法返回,而不是在map函数中返回,类似于在javascript的map函数中使用返回.

有没有办法实现我想要的语法?或者我需要把这个赋值给一个变量,然后让它挂在末尾,就像这样:

def some_method(array)
    array.map do |x|
      returnme = x-1
      if x > 10
         returnme = x+1 #or whatever
      end
      returnme
    end
end

推荐答案

你不需要变量.块的返回值是在其中计算的最后一个表达式的值.在这种情况下,if.

def some_method(array)
    array.map do |x|
      if x > 10
         x+1
      else
         x-1
      end
    end
end

我想三元运算符看起来会更好.更具表情.

def some_method(array)
  array.map do |x|
    (x > 10) ? x+1 : x-1
  end
end

如果你坚持使用return,那么你可以使用lambdas.在lambdas中,return的行为与普通方法类似.

def some_method(array)
  logic = ->(x) {
    if x > 10
      return x + 1
    else
      return x - 1
    end
  }
  array.map(&logic)
end

不过,这种形式很少见.如果你的代码很短,它肯定可以重写为表达式.如果您的代码足够长和复杂,足以保证多个退出点,那么您可能应该try 简化它.

Ruby相关问答推荐

如何使用 gsub 删除返回字符串中的/和/i?

生成带有小写字母和数字的唯一随机字符串

ruby 中的魔术注释(#Encoding: utf-8)是如何工作的?

数组到哈希:字数

冒号:和粗箭头=>有什么区别

如何在 Sinatra 中解析 JSON 请求正文一次并将其公开给所有路由?

如何按长度对 Ruby 字符串数组进行排序?

如何判断 Ruby 数组是否包含多个值之一?

如何合并散列数组以获取值数组的散列

`require': no such file to load in ruby

Ruby 哈希默认值行为

如何引用全局变量和类变量?

在 RSpec 测试期间 suppress 控制台输出

如何通过反射获得活动记录关联

使用 `?`(问号)在 Ruby 中获取 ASCII 字符代码失败

如何在 Ruby 中做标准差?

在ruby中将字符串转换为十进制数

Ruby 哈希白名单过滤器

如何在文件夹及其所有子文件夹中搜索特定类型的文件

你可以在Ruby中使用分号吗?