/ / ruby ​​eval ('1') gsub možné? - rubín, eval, gsub

ruby eval ('1') gsub je možné? - rubín, eval, gsub

Snažím sa nahradiť podtriedu obsahom cennosti, kde sa jeho názov zhoduje s podtriedou:

>> str = "Hello **name**"
=> "Hello **name**"
>> name = "John"
=> "John"

str.gsub(/**(.*)**/, eval("1")) # => error!

posledný riadok vyššie uvedeného kódu je syntaktická chyba. a:

>> str.gsub(/**(.*)**/, "1")
=> "Hello name"
>> str.gsub(/**(.*)**/, eval("name"))
=> "Hello John"

to, čo chcem, je výsledok:

str.gsub(/**(.*)**/, eval("name")) # => "Hello John"

akákoľvek pomoc bude ocenená. Vďaka!

odpovede:

7 pre odpoveď č. 1

Skúste to:

str = "Hello **name**"
name = "John"
str.gsub(/**(.*)**/) { eval($1) }

Na gsub metóda tiež akceptuje blok, ktorý bude vyhodnotený a návratová hodnota bude použitá ako substitúcia. Špeciálne premenné $1, $2a tak ďalej, sú rovnaké ako pri používaní 1 v reťazci.

O niečo lepšia alternatíva ako použitie eval() by bolo použitie a Hash s náhradnými hodnotami:

str = "Hello **name**"
names = { "name" => "John" }
str.gsub(/**(.*)**/) { names[$1] }

1 pre odpoveď č. 2

Uvedomujem si, že to nie je odpoveď na vašu otázku, ale pozreli ste sa na to Kvapalné značenie? To isté v podstate dosahuje pomocou dvojitých zátvoriek {{}}

@template = Liquid::Template.parse("hi {{name}}") # Parses and compiles the template
@template.render( "name" => "tobi" )              # => "hi tobi"