所以我开始研究 Ramda/Folktale。我在尝试映射来自目录的一系列任务时遇到问题。我正在尝试解析文件内容。
var fs = require('fs');
var util = require('util');
var R = require('ramda');
var Task = require('data.task');
var compose = R.compose;
var map = R.map;
var chain = R.chain;
function parseFile(data) {
console.log("Name: " + data.match(/\$name:(.*)/)[1]);
console.log("Description: " + data.match(/\$description:(.*)/)[1]);
console.log("Example path: " + data.match(/\$example:(.*)/)[1]);
}
// String => Task [String]
function readDirectories(path) {
return new Task(function(reject, resolve) {
fs.readdir(path, function(err, files) {
err ? reject(err) : resolve(files);
})
})
}
// String => Task String
function readFile(file) {
return new Task(function(reject, resolve) {
fs.readFile('./src/less/' + file, 'utf8', function(err, data) {
err ? reject(err) : resolve(data);
})
})
}
var app = compose(chain(readFile), readDirectories);
app('./src/less').fork(
function(error) { throw error },
function(data) { util.log(data) }
);
我正在读取目录中的文件并返回任务。当这个问题解决时,它应该进入 readFile 函数(它返回一个新任务)。一旦它读取文件,我希望它只解析其中的一些位。
具有以下内容:
var app = compose(chain(readFile), readDirectories);
它进入了 readFile 函数,但"file"是一个文件数组,因此它出错了。
与:
var app = compose(chain(map(readFile)), readDirectories);
我们从未进入 fs.readfile(),但"file"是实际文件名。
我对此很困惑,文档也令人费解。欢迎提出任何建议。
谢谢
最佳答案
'use strict';
const fs = require('fs');
const Task = require('data.task');
const R = require('ramda');
// parseFile :: String -> { name :: String
// , description :: String
// , example :: String }
const parseFile = data => ({
name: R.nth(1, R.match(/[$]name:(.*)/, data)),
description: R.nth(1, R.match(/[$]description:(.*)/, data)),
example: R.nth(1, R.match(/[$]example:(.*)/, data)),
});
// readDirectories :: String -> Task (Array String)
const readDirectories = path =>
new Task((reject, resolve) => {
fs.readdir(path, (err, filenames) => {
err == null ? resolve(filenames) : reject(err);
})
});
// readFile :: String -> Task String
const readFile = filename =>
new Task(function(reject, resolve) {
fs.readFile('./src/less/' + filename, 'utf8', (err, data) => {
err == null ? resolve(data) : reject(err);
})
});
// dirs :: Task (Array String)
const dirs = readDirectories('./src/less');
// files :: Task (Array (Task String))
const files = R.map(R.map(readFile), dirs);
// sequenced :: Task (Task (Array String))
const sequenced = R.map(R.sequence(Task.of), files);
// unnested :: Task (Array String)
const unnested = R.unnest(sequenced);
// parsed :: Task (Array { name :: String
// , description :: String
// , example :: String })
const parsed = R.map(R.map(parseFile), unnested);
parsed.fork(err => {
process.stderr.write(err.message);
process.exit(1);
},
data => {
process.stdout.write(R.toString(data));
process.exit(0);
});
我将每个转换写在单独的一行中,这样我就可以包含类型签名,使嵌套映射更容易理解。这些当然可以通过 R.pipe 组合成一个管道。 .
最有趣的步骤是使用 R.sequence将 Array (Task String) 转换为 Task (Array String),并使用 R.unnest将 Task (Task (Array String)) 转换为 Task (Array String)。
我建议看看 plaid/async-problem如果您还没有这样做的话。
关于javascript - 在 Javascript 中映射一组任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518361/
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e
我以前没有使用过cron,所以我不能确定我这样做是对的。我想要自动化的任务似乎没有运行。我在终端中执行了这些步骤:sudogeminstall每当切换到应用程序目录无论何时。(这创建了文件schedule.rb)我将此代码添加到schedule.rb:every10.minutesdorunner"User.vote",environment=>"development"endevery:hourdorunner"Digest.rss",:environment=>"development"end我将此代码添加到deploy.rb:after"deploy:symlink","depl
如何在Rake任务中运行Capybara功能?例如:访问('http://google.com')谢谢! 最佳答案 在任务中尝试这样的事情:require'capybara'require'capybara/dsl'Capybara.current_driver=:seleniumBrowser=Class.new{includeCapybara::DSL}page=Browser.new.pagepage.visit("http://www.google.com")puts(page.html)
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan