gpt4 book ai didi

ruby - 如何通过中间人扩展访问变量?

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:57 25 4
gpt4 key购买 nike

我一直无法通过中间人扩展的各个部分一致地访问数据。为了解释,这里有一个简单的示例扩展,它只设置变量:

class NextPrevious < Middleman::Extension
option :var1, true, 'A example variable.'

def initialize(app, options_hash={}, &block)
super

app.set :var2, true
@var3 = true

# test all variables
puts defined?(options.var1) ? options.var1 : false #=> true
puts defined?(var2) ? var2 : false #=> true
puts defined?(@var3) ? @var3 : false #=> true
end

def manipulate_resource_list(resources)

# test all variables
puts defined?(options.var1) ? options.var1 : false #=> true
puts defined?(var2) ? var2 : false #=> false
puts defined?(@var3) ? @var3 : false #=> true
end

helpers do
def test_helper

# test all variables
puts defined?(options.var1) ? options.var1 : false #=> false
puts defined?(var2) ? var2 : false #=> true
puts defined?(@var3) ? @var3 : false #=> false
end
end

end

因此给定三个变量、一个选项、一个全局设置和一个实例变量,所有三个方法都不能访问任何一个。 我需要所有这三种方法,因为我想收集一些数据(从 .yml),通过站点地图对其进行操作(使用 manipulate_resource_list)并在助手中使用它。我不知道如何找到它们的范围结束的位置,或者如何正确地传递它们,因为我不太了解在加载过程中调用每个方法的位置或它们之间的关系。有什么建议吗?

最佳答案

我不想使用 @@var$var。扩展选项是执行此操作的预期方式,但正如您所发现的,全局助手位于全局中间人应用程序的上下文中,而不是扩展的上下文中。

执行此操作的一个好方法是从全局扩展注册表中提取扩展。因此,假设您的扩展名为 :next_previous:

helpers do
def test_helper
opts = extensions[:next_previous].options
puts opts.defines_setting?(:var1) ? opts.var1 : false
end
end

请注意,options 属性实际上是 ConfigurationManager 的一个实例,因此可以使用 defines_setting? 之类的方法来检查设置,而不是 defined?

关于ruby - 如何通过中间人扩展访问变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com