Ruby 2.1.3 options hash不能用fetch赋值

Ruby 2.1.3 options hash cannot be assigned with fetch

请向我解释为什么会这样:

def resizeImage(event_file, resize_width, resize_height, options = {})
  puts options
  aspect_ratio = options.fetch(:maintain_aspect_ratio, true)
  puts aspect_ratio
  "return value"
end


resizeImage('event_file', 'resize_width', 'resize_height', {maintain_aspect_ratio: false} )
{:maintain_aspect_ratio=>false}
false
 => "return value" 

我想将一个变量设置为 = 从散列中获取,以使我的代码更具可读性。但是由于某种原因,当我调用它时它是零。看起来抓取是异步的,但这不是 ajax.

我知道这是一个非常基本的问题,但据我所知,我正在做的事情就像在 ruby 方法中使用选项的不止一个指南中描述的那样。

-- 更新--

所以现在我有它 returning 其他东西来尝试分离问题。我看到 aspect_ratio 的 puts 语句实际上根本没有 return 任何东西。发生了什么事?

--更新2--

好吧,我糊涂了。这是 returning 错误。所以我的真实方法还有其他问题。谢谢你的时间,我会接受最详细的答案,但我很感激。

从您的方法中删除这一行:

puts aspect_ratio

您的 Ruby 方法正在 return 计算最终语句的值,即 puts 的值。

当您删除该行时,您的方法将 return aspect_ratio.

您实际上拥有正确的结构,但是您方法中的最终 put 导致 return 值为 nil。 Ruby 使用隐式 return,因此除非指定,否则它将 return 方法的最后一个值。从方法中删除 puts aspect_ratio,或确保最后一行是 aspect_ratio 并且该方法将正确地 return 您的值

def resizeImage(event_file, resize_width, resize_height, options = {}) 
  puts options
  aspect_ratio = options.fetch(:maintain_aspect_ratio, true)
  puts aspect_ratio #remove this line
  aspect_ratio
end

这最终可以缩短为

def resizeImage(event_file, resize_width, resize_height, options = {}) 
  options.fetch(:maintain_aspect_ratio, true)
end

@joelparkerhendersons 回答正确

我要解释发生了什么。

ruby returns 中的所有内容(除了极少数)。可以使用 return 强制执行,但默认情况下返回方法的最后一行。

你的方法resizeImagereturns什么putsreturns。 puts returns nil

因此,@joelparkerhendersons 建议删除 puts