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ď č. 1Skú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
, $2
a 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"