DIP 1027---String Interpolation---Format Assessment
Petar
Petar
Wed Feb 26 11:13:12 UTC 2020
On Wednesday, 26 February 2020 at 09:45:55 UTC, Walter Bright
wrote:
> On 2/25/2020 1:36 AM, aliak wrote:
>> This may have already been answered in the other threads, but
>> I was just wondering if anyone managed to propose a way to
>> avoid this scenario with DIP1027?
>>
>> void f(string s, int i = 0);
>> f(i"hello $a"); // silent unwanted bahviour.
>>
>> ?
>
> It is lowered to:
>
> f("hello %s", a);
>
> as designed. I don't know what's unwanted about it.
In all other languages with string interpolation that I'm
familiar with, `a` is not passed to the `i` parameter.
---
C#
Code:
public class Program
{
public static void f(string s, int i = 21)
{
System.Console.WriteLine($"s='{s}' | i='{i}'");
}
public static void Main()
{
int a = 42;
f($"hello {a}");
}
}
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/ZigzagStickyHardware
---
JavaScript
Code:
function f(s, i = 21) {
console.log(`s='${s}' | i='${i}'`);
}
const a = 42;
f(`hello ${a}`);
Output:
s='hello 42' | i='21'
Try it online:
https://repl.it/repls/TechnologicalJointDisassembler
---
Python
Code:
def f(s, i = 21):
print(f"s='{s}' | i='{i}'")
a = 42;
f(f"hello {a}");
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/CrookedOutlandishInstructions
---
Ruby:
Code:
def f(s, i = 21)
puts "s='#{s}' | i='#{i}'"
end
a = 42;
f("hello #{a}")
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/MidnightblueProudAgent
---
Kotlin
Code:
fun f(s: String, i: Int = 21) {
println("s='$s' | i='$i'");
}
val a = 42;
f("hello $a");
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/ImpartialPepperyProducts
---
Dart
Code:
void f(String s, [int i = 21]) {
print("s='${s}' | i='${i}'");
}
void main() {
const a = 42;
f("hello ${a}");
}
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/AwareSqueakyProlog
---
Swift
Code:
func f(_ s: String, _ i: Int = 21) {
print("s='\(s)' | i='\(i)'");
}
let a = 42
f("hello \(a)")
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/MulticoloredCulturedRule
---
Julia:
Code:
function f(s, i = 21)
print("s='$s' | i='$i'")
end
a = 42
f("hello $a")
Output:
s='hello 42' | i='21'
Try it online: https://repl.it/repls/StupidAcidicDatabases
---
And so on...
More information about the Digitalmars-d-announce
mailing list