bundle install 给予:
> undefined method `ruby' for #<Bundler::Dsl:0x00000001c4e1f8>
Run Code Online (Sandbox Code Playgroud)
知道怎么解决?我正在使用Ruby 1.9.3-p125.
尝试鱼贝,所以我翻译我的bash功能.问题是,在一种情况下,我正在使用bash正则表达式来检查字符串是否与正则表达式匹配.我无法弄清楚如何把它翻译成鱼.
这是我的例子.
if [[ "$arg" =~ ^[0-9]+$ ]]
...
Run Code Online (Sandbox Code Playgroud)
那么,在*nix中是否有一种方法可以检查字符串是否与正则表达式匹配,所以我可以将它放入条件中?
这是我目前有效的,但我不满意:
# kill jobs by job number, or range of job numbers
# example: k 1 2 5
# example: k 1..5
# example: k 1..5 7 10..15
# example: k 1-5 7 10-15
function k
for arg in $argv
if ruby -e "exit ('$arg' =~ /^[0-9]+\$/ ? 0 : 1)"
kill -9 %$arg
else
set _start (echo …Run Code Online (Sandbox Code Playgroud) 试图弄清楚如何获取当前时间,我找到了方法,但不知道如何读取类型签名.
签名是now : Task x Time你可以在这里看到的.
无法弄清楚如何搜索它,因为它们x在任何地方都用作变量名,我通常可以在解析器代码中找到合适的位置,但是跟随它有很多困难.
我在 CI 盒子上运行测试。为了加快速度,我只是做了一个浅克隆:
git clone --depth 1 git@github.com:JoshCheek/some_repo.git
Run Code Online (Sandbox Code Playgroud)
假设所有测试都通过,我想触发管道中的下一步。触发的内容取决于上次部署(参考d123456)和我刚刚测试的当前参考(参考c123456)之间更改的文件。如果我做了一个普通的克隆,我可以发现这样的结果:
git diff --name-only d123456 c123456
Run Code Online (Sandbox Code Playgroud)
但我的克隆很浅,所以它不知道这些提交。我发现我可以用来git fetch --depth=n获取更多历史记录,但我只知道 SHA,而不知道 SHA 的深度。以下是可能可以回答这个问题的一组方法:
# hypothetical remote diff
git diff --name-only origin/d123456 origin/c123456
# hypothetical ref based fetch
git fetch --shallow-through d123456
git diff --name-only d123456 c123456
# hypothetical way to find the depth I need
depth=`git remote depth-to d123456`
git fetch --depth "$depth"
git diff --name-only d123456 c123456
Run Code Online (Sandbox Code Playgroud)
否则,我似乎可能必须编写一个循环并继续调用,--deepen直到我的历史记录包含提交。这看起来很痛苦(意味着编写/维护很烦人)并且昂贵(意味着缓慢,请记住浅层克隆的目的是减少这种成本)。
我使用Bruno的帖子来找到解决方案,但觉得它需要更具体,所以这显然是我所做的.
$ CURL_CA_BUNDLE=~/.ssh/cacert.pem ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"我在Mac OSX Leopard上.
我正在尝试安装自制软件,但是我收到以下错误:
$ ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/Formula/...
/usr/local/Library/Homebrew/...
==> The following directories will be made group writable:
/usr/local/bin
/usr/local/lib
/usr/local/lib/pkgconfig
/usr/local/share/man/man1
/usr/local/share/man/man3
Press enter to continue
==> /usr/bin/sudo /bin/chmod g+w /usr/local/bin /usr/local/lib /usr/local/lib/pkgconfig /usr/local/share/man/man1 /usr/local/share/man/man3
==> Downloading and Installing Homebrew...
curl: (60) SSL certificate problem, …Run Code Online (Sandbox Code Playgroud) 我正在做重构,每次我取得任何不错的进展时都会不断修改。它进展得非常顺利,我意识到能够向人们展示我如何处理如此巨大的重构(很多小步骤,只是轻推代码,每个点都有一个绿色测试套件)会很好。
提交都在我的reflog 中。有没有办法将每个修改后的提交转换为自己的真实提交(抱歉,不知道术语),以便用户可以看到每个步骤,而不仅仅是第 81 行和第 57 行的汇总步骤?我不需要提交或任何东西的独特消息,只需要它们在历史记录中被捕获。
这一切仍在我的本地仓库中。
我有一个常见的用例,我想写一个函数:我经常想要cd到一些相对于某个文件的目录.
$ gem which rspec/core | xargs echo -n | pbcopy
$ cd *paste and delete end until direcory looks right*
Run Code Online (Sandbox Code Playgroud)
注意:gem which rspec/core打印类似"/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0/lib/rspec/core.rb"
$ gem which rspec/core | 2dir 3
Run Code Online (Sandbox Code Playgroud)
这将把我变成"/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0"(传递参数"3"告诉它删除"lib/rspec/core.rb"从头到尾"
2dir() {
read dir
for i in $(seq 1 $1)
do
dir="${dir%/*}"
done
cd "$dir"
}
Run Code Online (Sandbox Code Playgroud)
但是cd改变了函数的目录,而不是我的目录.我尝试用别名交换它,但无法弄清楚如何制作匿名函数或传递参数.
我正在尝试做一些概念上与此相似的事情,但似乎无法让它发挥作用(最后显示的错误)任何想法?
#include <stdio.h>
int main( int argc , char const *argv[] )
{
int abc_def_ghi = 42;
#define SUFFIX ghi
#define VAR(prefix) prefix##_def_##SUFFIX
printf( "%d\n" , VAR(abc) );
return 0;
}
// untitled:8: error: ‘abc_def_SUFFIX’ undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud) 如果我能找到一种方法来做类似的事情,我可以在我的应用程序中删除数百行代码,并大大提高可维护性.有人有主意吗?
#include <stdio.h>
int main( )
{
#define include_all_files(root) \
#include #root "1.h" \
#include #root "2.h" \
#include #root "3.h" \
#include #root "4.h"
include_all_files( first_library )
include_all_files( second_library )
include_all_files( third_library )
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我很欣赏这些回复,我的例子似乎导致了误导,所以这就是我实际上要解决的问题:
我正在实现一个有限状态机.通过命名约定,我已经让它变得像添加状态一样简单:
STATE(initial_screen)
#include "initial_screen.state"
END_STATE
STATE(login)
#include "login.state"
END_STATE
Run Code Online (Sandbox Code Playgroud)
但是,如果我能回答原来的问题,我可以将其重构为简单的事情:
ADD_STATE(initial_screen)
ADD_STATE(login)
Run Code Online (Sandbox Code Playgroud)
这是因为文件名和状态名称以及所有底层连接和其他所有内容都遵循类似的约定.但是,我无法弄清楚如何根据宏中收到的令牌实现包含文件.