在与常规使用php和ruby的同事进行代码审查之后,与ruby相比,php中的字符串插值有了一个有趣的挑战.
假设color ="orange";
红宝石:
puts("My favorite color is #{color.downcase() + 'ish'} -- at least for now.");
Run Code Online (Sandbox Code Playgroud)
PHP:
print("My favorite color is {strtolower( $color ) + 'ish'} -- at least for now.");
Run Code Online (Sandbox Code Playgroud)
挑战:任何人都可以指定一种方法来使PHP版本像Ruby一样吗?
这个挑战旨在作为一种有趣的练习,仅限于使用直接PHP.这不适用于严肃的PHP项目.对于严肃的PHP项目,开发人员需要考虑插件库,例如TWIG.
我正在尝试在Ruby中编写一个方法,该方法使用带有输入变量的HTML代码的here-document并相应地填充它们.
我的方法是:
calcForm(left, op, right, result)
Run Code Online (Sandbox Code Playgroud)
我正在使用的html标签是
<input type="text" name="left" value="?????">
<select name="op">
<option value="add" ?????>+</option>
<option value="mul" ?????>*</option>
</select>
<input type="text" name="right" value="?????">
=
?????
Run Code Online (Sandbox Code Playgroud)
到处都有问号,我的方法必须填写变量left,op,right和result.
例如,
calcForm(6, "mul", 7, 42)
Run Code Online (Sandbox Code Playgroud)
应该返回字符串:
<input type="text" name="left" value="**6**">
<select name="op">
<option value="add">+</option>
<option value="mul" **selected**>*</option>
</select>
<input type="text" name="right" value="**7**">
=
**42**
Run Code Online (Sandbox Code Playgroud)
因此,"选择"一词应出现在"添加"或"jul"之后,取决于op的值,左侧和右侧的值应填入value ="...",结果应出现在最后一行.
我是ruby的新手,但到目前为止,这是我对这里文档的了解:
the_tags = <<HERE
<input type="text" name="left" value=#{left}>
<select name="op">
<option value="add" #{op}>+</option>
<option value="mul" #{op}>*</option>
</select>
<input type="text" name="right" value=#{right}>
=
#{result}
HERE
def calcForm(left,op,right,result)
Run Code Online (Sandbox Code Playgroud)
我被困在这一点上.我很困惑如何将我的方法calcForm连接到上面的here文档. …
在以下代码中,k2与几乎没有区别k1。也就是说,k2除了使用插值定义以外,其他完全相同。(也就是说,我希望它是完全相同的;显然,从结果p k2来看是不一样的。)
v = /[aeiouAEIOUäöüÄÖÜ]/ # vowels
k1 = /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/ # consonants defined without interpolation
k2 = /[[ßb-zB-Z]&&[^#{v}]]/ # consonants defined same way, but with interpolation
Run Code Online (Sandbox Code Playgroud)
但是如下所示,gsub与k1Works一起使用,而与之结合使用却以k2我不理解的方式失败。
all_chars = "äöüÄÖÜß"<<('a'..'z').to_a.join<<('A'..'Z').to_a.join
p all_chars # "äöüÄÖÜßabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
p all_chars.gsub( k1 , '_' ) # "äöüÄÖÜ_a___e___i_____o_____u_____A___E___I_____O_____U_____"
p all_chars.gsub( k2 , '_' ) # "äöüÄÖÜ_abcdefghijklm_o_____u__x__ABCDEFGHIJKLMNOPQRSTUVWXYZ"
p k1 # /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/
p k2 # /[[ßb-zB-Z]&&[^(?-mix:[aeiouAEIOUäöüÄÖÜ])]]/
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?什么(?-mix:...)啊 有没有办法像我期望的那样进行这项工作?
我目前正在尝试使用变量在三引号字符串中连接.最好的方法是什么?
print('''
Points left to spend: ''' + str(pointsLeft) + '''
''' + str(attrChoice) + ':\t' + '''[''' + str(charAttr[attrChoice]) + ''']
To reduce the number of points spent on this skill, simply enter a negative number.
'''
)
Run Code Online (Sandbox Code Playgroud)
我得到的错误消息是:关键字不能是表达式.任何人都可以解释这意味着什么,以及是否有可能尝试这样的连接?
这不起作用:
FOOBAR = 'foobar'
%W{ FOOBAR }
output: ["FOOBAR"]
Run Code Online (Sandbox Code Playgroud)
但是,常量通过以下方式正确插值:
"#{FOOBAR}"
output: "foobar"
Run Code Online (Sandbox Code Playgroud) 有没有办法使用C#6的字符串插值多行字符串?
就像是
string a = "1111";
string s = @$"
{a}
";
Run Code Online (Sandbox Code Playgroud)
以上不起作用.
我有一个字典和一个转换为字符串的日期时间对象.如何在同一行中打印日期时间字符串和字典中的几个项目?
例如:
dictionary = {"_source": {"host": "host", "type": "type"}}
datetime = '25-08-2017 10:26:11'
Run Code Online (Sandbox Code Playgroud)
这就是我要打印的内容:
print("%s %(host)s %(type)s" % (datetime,dictionary["_source"]))
Run Code Online (Sandbox Code Playgroud)
在datetime字符串上获取错误:
TypeError: format requires a mapping
Run Code Online (Sandbox Code Playgroud)
谢谢!
在Perl语言中,我可以用双引号heredocs进行插值:
Perl的:
#!/bin/env perl
use strict;
use warnings;
my $job = 'foo';
my $cpus = 3;
my $heredoc = <<"END";
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Run Code Online (Sandbox Code Playgroud)
Rakudo Perl 6:
#!/bin/env perl6
my $job = 'foo';
my $cpus = 3;
my $heredoc = qq:to/END/;
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Run Code Online (Sandbox Code Playgroud)
我如何在Python中做类似的事情?在搜索"heredoc字符串插值Python"时,我确实遇到了有关Python f字符串的信息,这有助于字符串插值(适用于Python 3.6及更高版本).
带有f-strings的Python 3.6+:
#!/bin/env python3
job = 'foo'
cpus = 3
print(f"#SBATCH job {job}")
print(f"#SBATCH cpus-per-task {cpus}")
Run Code Online (Sandbox Code Playgroud)
以上所有三个都产生完全相同的输出:
Run Code Online (Sandbox Code Playgroud)#SBATCH job cutadapt #SBATCH cpus-per-task …
我想插入一个字符串的中间,但我不能使用String.Format,因为该字符串包含{}大括号.
这是我到目前为止所尝试的:
string code = "(function(){var myvariable = $"{variableToBeInterpolated}"});"
Run Code Online (Sandbox Code Playgroud)
返回:)预期; 预期
编辑:我尝试了下面的代码片段,插值现在正在工作,但代码不会在浏览器中执行.
"(function(){var myvariable=" + $"{myvariable c#}" + ")});"
Run Code Online (Sandbox Code Playgroud) I have the following object:
var obj = {
number: "123456789"
tel: `The clients phone number is ${number}. Please call him!`
Run Code Online (Sandbox Code Playgroud)
How can I insert the number value in the tel-string?
ruby ×4
python ×3
heredoc ×2
c# ×1
c#-6.0 ×1
comparison ×1
dictionary ×1
javascript ×1
php ×1
regex ×1
string ×1
syntax-error ×1