我正在尝试将CsvHelper用于项目.我浏览了文档,但是我找不到用单一方法读取所有列名的方法.如何使用CsvHelper轻松获取所有列标题名称的列表?我现在这样做,但我认为有更好的方法.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CsvHelper;
using System.IO;
namespace Kg
{
class Program
{
static void Main(string[] args)
{
using (var reader = new StreamReader(@"myfile.csv"))
{
var csv = new CsvReader(reader);
csv.Read();
var has_header = true;
var csv_headers = new List<string>();
var header_index = 0;
while (has_header)
{
has_header = csv.TryGetField<string>(header_index, out string header_name);
if (has_header)
{
header_index += 1;
csv_headers.Add(header_name);
}
}
Console.WriteLine(csv_headers.Count);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想让自己熟悉ruby语法和编码样式(我是新手).我遇到了一个使用的代码,<<-这在Ruby中意味着什么?代码是
def expectation_message(expectation)
<<-FE
#{expectation.message}
#{expectation.stack}
FE
end
Run Code Online (Sandbox Code Playgroud)
这只是整个代码的一部分.任何帮助,将不胜感激.
是否有proc.send等效的proc?例如:
def s a
a + 1
end
b = "s"
send b.to_sym,10 #=> 11
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?
p = Proc.new{|s| s + 1}
d = "p"
*call d.to_sym,10 *
Run Code Online (Sandbox Code Playgroud)
编辑:为了回应mudasobwa的回答,我需要从一系列方法中调用Procs.例如:
ss = ["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
在这种情况下是否可能?
如何将方法的结果传递给ruby中的另一个方法?例如:
class D
def initialize(text)
@text = text
end
def a s
"hello #{s}"
end
def b s
"hi #{s}"
end
end
Run Code Online (Sandbox Code Playgroud)
所以,我想要做的是将方法a的输出传递给方法b.所以基本上(如果方法不在类中)我可以执行以下操作:
puts b(a "Tom") #=>hi hello Tom
Run Code Online (Sandbox Code Playgroud)
但是,即使这不在一个类中,如果有很多方法也不会很好看,所以必须有更优雅的方法来做到这一点.那么hi hello Tom通过将方法a和b应用于类D的实例来获得输出的正确方法是什么?
更新我只是想让它更清晰一些.例如,在F#中,您可以执行以下操作:
let a s = "hello " + s
let b s = "hi " + s
"Tom" |> a |> b #=> hello hi Tom
Run Code Online (Sandbox Code Playgroud)
这里我们定义了函数a和b,然后将结果传递给下一个函数.我知道它是一种功能性语言,所以做事的方式会有所不同.但我只是想知道Ruby中是否有这样的技巧?