Ruby 2.1.3选项哈希不能与fetch一起分配

Ruby 2.1.3选项哈希不能与fetch一起分配,ruby,hash,fetch,options,Ruby,Hash,Fetch,Options,请向我解释为什么会发生这种情况: 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', '

请向我解释为什么会发生这种情况:

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方法中使用选项的多个指南中描述的一样

--更新--

所以现在我让它返回一些其他的东西来尝试分离这个问题。我看到aspect_ratio的puts语句实际上根本没有返回任何内容。发生了什么事

--更新2--


好吧,我搞糊涂了。它返回错误。所以在我的真实方法中还有其他错误。谢谢您的时间,我将接受最详细的回答,但我非常感谢您的回答。

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

puts aspect_ratio
您的Ruby方法正在返回final语句的值,即
put
的值


删除该行时,您的方法将返回
纵横比

从方法中删除该行:

puts aspect_ratio
您的Ruby方法正在返回final语句的值,即
put
的值


当您删除该行时,您的方法将返回
纵横比

您实际上拥有正确的结构,但是方法中的最终put会导致返回值为零。Ruby使用隐式返回,因此除非指定,否则它将返回方法的最后一个值。从方法中删除
put aspect\u ratio
,或者确保最后一行是
aspect\u ratio
,方法将正确返回您的值

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

实际上,您已经拥有了正确的结构,但是方法中的最终put导致返回值为零。Ruby使用隐式返回,因此除非指定,否则它将返回方法的最后一个值。从方法中删除
put aspect\u ratio
,或者确保最后一行是
aspect\u ratio
,方法将正确返回您的值

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

@乔尔帕克汉德森的回答是正确的

我要解释发生了什么事

ruby中的所有东西都会返回一些东西(除了一小部分)。可以使用
return
强制执行,但默认情况下会返回方法的最后一行

您的方法
resizeImage
返回
put
返回的内容<代码>放置返回
nil


因此,正如@joelparkerhendersons建议的那样,删除
放置
@joelparkerhendersons的答案是正确的

我要解释发生了什么事

ruby中的所有东西都会返回一些东西(除了一小部分)。可以使用
return
强制执行,但默认情况下会返回方法的最后一行

您的方法
resizeImage
返回
put
返回的内容<代码>放置
返回
nil


因此,正如@joelparkerhendersons建议的那样,我明白了,删除
put

。谢谢你和上面的人的回答,你是对的。但这是否意味着我不能在方法中使用纵横比(显然,我试图简化问题)。如何在方法中访问纵横比?我将修改上面的问题以进行说明。您可以在方法中添加任意数量的puts语句(或在整个过程中继续使用纵横比)。重要的一点是,确保方法中的最后一行返回希望方法返回的值。由于您想返回纵横比,所以最后一行不能放(纵横比),因为puts返回nil.Yes。对不起,我做了一个错误的假设。我正在更新现有的工作方法,以使用选项,而不是强制的纵横比字段。当我用选项定义变量后它停止工作时,我假设问题是因为选项。但实际上,可能只是我在rails中的模块资产不稳定,没有持续更新。实际上,真正的问题是我忘了在终端中打开的另一个版本的repo中有一个不同的分支,并且从错误的repo启动rails。小本经营的工作流程~这是一个很好的理由,你所做的改变似乎没有发生。我明白了。谢谢你和上面的人的回答,你是对的。但这是否意味着我不能在方法中使用纵横比(显然,我试图简化问题)。如何在方法中访问纵横比?我将修改上面的问题以进行说明。您可以在方法中添加任意数量的puts语句(或在整个过程中继续使用纵横比)。重要的一点是,确保方法中的最后一行返回希望方法返回的值。由于您想返回纵横比,所以最后一行不能放(纵横比),因为puts返回nil.Yes。对不起,我做了一个错误的假设。我正在更新现有的工作方法,以使用选项,而不是强制的纵横比字段。当我用选项定义变量后它停止工作时,我假设问题是因为选项。但实际上,可能只是我在rails中的模块资产不稳定,没有持续更新。实际上,真正的问题是我忘了在终端中打开的另一个版本的repo中有一个不同的分支,并且从错误的repo启动rails。小额工作流程~这是您正在进行的更改似乎没有发生的一个很好的原因。
p aspect\u ratio
不会有问题。
p aspect\u ratio
不会有问题。