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
不会有问题。