using System;
using System.Linq;
using System.Console;
def x1 = [("1", "1"), ("2", "2")];
def x2 = [("1", 1), ("2", 2)];
def z1(v) { WriteLine(String.Join(",", v.Select(((a, b))=>{$"$(a)=$(b)"}).ToArray())) };
def z2(v) { WriteLine(String.Join(",", v.Select(((a, b))=>{$"$(a)=$(b)"}).ToArray())) };
z1(x1);
z2(x2);
вывод:
d:\projects\NemerleTest>ncc32 -no-color -out:test4.exe -r:System.Xml.Linq test4.n && test4
(1, 1)=0,(2, 2)=1
1=1,2=2
баг или фича?
Здравствуйте, valeskas, Вы писали:
V>баг или фича?
Стечение обстоятельств. Там получается сложное наложение перегрузок и автоматическое преобразование кортежа в список параметров. Поведение конечно нежелательное. Но логически объяснимое.
Обойти это можно задав паттерн говорящий компилятору, что в параметре "a" ожидается именно кортеж:
def z2(v) { WriteLine(String.Join(",", v.Select((((_, _) as a, b))=>{$"$(a)=$(b)"}).ToArray())) };
Когда будет по больше свободного времени можно будет попробовать по колдовать над этим.