gpt4 book ai didi

ruby - 内存在过程中有效吗?

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

我有以下方法:

def download_link_for(site,title=nil)
template = proc {|word|(title ? "%s_#{title}_csv": "%s_csv") % word}

if site.send(template.call("update")) == false
x.a "Generate", :href => "/#{template.call("generate")}/#{site.id}"
else
xpr "Generating.."
end
if site.send(template.call("latest")) > 0 && site.send(template.call("update")) == false
%|

<a href="/#{template.call("download")}/#{site.id}" class="tooltip-left" title="Download the #{title} as a .csv file" id="download_pdf">
<img src="/images/csv_download.png" alt="Download"/>
</a>
(#{timedate(site.send(template.call("latest")))})
|

end
end

问题是过程。我想知道 memoization 是否在 proc 中起作用?专门用于:

title ?  "%s_#{title}_csv": "%s_csv"

请记住,我正在使用 ruby​​ 1.8.7,但也欢迎提供有关 1.9+ 的信息。

主要问题是 proc 内部的三元组只需要在第一次计算,所以我不希望每次调用 proc 时都计算它。

编辑:我的想法是像这样使用柯里化(Currying):

template = proc {|tem,word|tem % word}.curry(type ?  "%s_#{type}_csv" : "%s_csv")

但出于某种原因,它一直在响应没有将 String 隐式转换为 Integer 我认为 ruby​​ 将 % 解释为模数而不是字符串模板。即使像这样包装 tem "#{tem}" 也没有真正起作用。

此外,curry 对我来说并不适用,因为它在 1.8.7 中不可用,但值得一试。

最佳答案

不确定为什么需要 curry 。你不能只使用一个实例变量来存储/内存三元运算的结果吗?

template = proc { |word| @title ||= (title ? "%s_#{title}_csv" : "%s_csv"); @title % word }

在 irb 中:

template = proc { |word| @title ||= word }

template.call "hello"
=> "hello"

template.call "goodbye"
=> "hello"

关于ruby - 内存在过程中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37751152/

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