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
强制执行,但默认情况下返回方法的最后一行。
你的方法resizeImage
returns什么puts
returns。 puts
returns nil
因此,@joelparkerhendersons 建议删除 puts
请向我解释为什么会这样:
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
强制执行,但默认情况下返回方法的最后一行。
你的方法resizeImage
returns什么puts
returns。 puts
returns nil
因此,@joelparkerhendersons 建议删除 puts