标签: string-interpolation

Ruby上瘾者在字符串中寻找PHP子表达式

上下文

  • PHP 5.3.x.

概观

在与常规使用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.

php ruby comparison string-interpolation

2
推荐指数
1
解决办法
837
查看次数

ruby这里的文件

我正在尝试在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文档. …

ruby string heredoc string-interpolation

2
推荐指数
1
解决办法
2562
查看次数

将正则表达式插入另一个正则表达式

在以下代码中,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)

但是如下所示,gsubk1Works一起使用,而与之结合使用却以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:...)啊 有没有办法像我期望的那样进行这项工作?

ruby regex string-interpolation

2
推荐指数
1
解决办法
700
查看次数

三重引用字符串的串联

我目前正在尝试使用变量在三引号字符串中连接.最好的方法是什么?

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)

我得到的错误消息是:关键字不能是表达式.任何人都可以解释这意味着什么,以及是否有可能尝试这样的连接?

python concatenation syntax-error string-interpolation

2
推荐指数
1
解决办法
2349
查看次数

为什么常量插值不能在Ruby中使用百分比表示法

这不起作用:

FOOBAR = 'foobar'
%W{ FOOBAR }

output: ["FOOBAR"]
Run Code Online (Sandbox Code Playgroud)

但是,常量通过以下方式正确插值:

"#{FOOBAR}"
output: "foobar"
Run Code Online (Sandbox Code Playgroud)

ruby string-interpolation

2
推荐指数
1
解决办法
426
查看次数

有没有办法使用C#6的字符串插值与多行字符串?

有没有办法使用C#6的字符串插值多行字符串?

就像是

   string a = "1111";
   string s = @$"
         {a}    
    ";
Run Code Online (Sandbox Code Playgroud)

以上不起作用.

string-interpolation c#-6.0

2
推荐指数
1
解决办法
804
查看次数

字符串和字典的Python字符串插值在同一行

我有一个字典和一个转换为字符串的日期时间对象.如何在同一行中打印日期时间字符串和字典中的几个项目?

例如:

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)

谢谢!

python dictionary string-interpolation

2
推荐指数
1
解决办法
1545
查看次数

如何在Python heredocs中插入变量?

在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)

以上所有三个都产生完全相同的输出:

#SBATCH job cutadapt
#SBATCH cpus-per-task …
Run Code Online (Sandbox Code Playgroud)

python heredoc string-interpolation

2
推荐指数
2
解决办法
1002
查看次数

在字符串中间插值

我想插入一个字符串的中间,但我不能使用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)

c# string-interpolation

2
推荐指数
1
解决办法
144
查看次数

JavaScript string interpolation on strings assigned as property values in objects

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?

javascript string-interpolation

2
推荐指数
1
解决办法
42
查看次数