Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.ruby > #4328
| From | Robert Klemme <shortcutter@googlemail.com> |
|---|---|
| Newsgroups | comp.lang.ruby |
| Subject | Re: how to make eval() faster? |
| Date | 2011-05-12 02:26 -0500 |
| Organization | Service de news de lacave.net |
| Message-ID | <BANLkTiktso12PvHEENASgEVfoqV3TXZ68Q@mail.gmail.com> (permalink) |
| References | <0229c425b2bf06473387c4f47263eb93@ruby-forum.com> <4DCB6EAA.7010101@gmail.com> <4c16a97bbcba0b1d4a451dc4f577e8be@ruby-forum.com> |
On Thu, May 12, 2011 at 8:08 AM, Zd Yu <zdyu2000@gmail.com> wrote:
> Joel VanderWerf wrote in post #998154:
>> On 05/11/2011 09:53 PM, Zd Yu wrote:
>>> make it faster?
>> Can you eval your formulas into methods, and call the methods on the
>> data samples?
>
> No. I need flexibility, i.e., allow users to define their own formulas
> in the configuration file.
I believe you did not fully understand what Joel suggested. You do
have that flexibility and you need to invoke eval only _once_ per
formula (for the initial compilation of the formula) but not for every
evaluation. Example:
# really too simplistic!
formulas = Hash.new do |h, form|
expr = form.sub(/\A.*?=\s*/, '')
vars = expr.scan(/[a-z]\w*/i).uniq
code = "lambda do |#{vars.join(', ')}| #{expr} end"
p vars, code
h[form] = eval(code)
end
# test
[
'x = y * 2 + z',
'z = y * x',
].each do |f|
puts f
10.times do |i|
printf "%s: %d %d => %f\n", f, i, i*2, formulas[f][i, i*2]
end
end
I'd prefer the DSL approach though.
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
Back to comp.lang.ruby | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-11 23:53 -0500
Re: how to make eval() faster? Joel VanderWerf <joelvanderwerf@gmail.com> - 2011-05-12 00:22 -0500
Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:08 -0500
Re: how to make eval() faster? Markus Schirp <mbj@seonic.net> - 2011-05-12 01:13 -0500
Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:18 -0500
Re: how to make eval() faster? Markus Schirp <mbj@seonic.net> - 2011-05-12 01:42 -0500
Re: how to make eval() faster? Robert Klemme <shortcutter@googlemail.com> - 2011-05-12 02:26 -0500
Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:37 -0500
Re: how to make eval() faster? Stu <stu@rubyprogrammer.net> - 2011-05-12 01:55 -0500
Re: how to make eval() faster? Xavier Noria <fxn@hashref.com> - 2011-05-12 02:14 -0500
csiph-web