小编elm*_*lmt的帖子

如何合并两个哈希没有新的键

我怎么能合并两个哈希值,导致没有新的键,这意味着合并会合并两个哈希中存在的键?

例如,我想要以下内容:

h = {:foo => "bar"}
j = {:foo => "baz", :extra => "value"}

puts h.merge(j)    # {:foo => "baz"}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种非常干净的方式,因为我当前的实现非常混乱.

ruby hash key duplicates

14
推荐指数
3
解决办法
7105
查看次数

Ruby 1.9.2中定义的instance_eval在哪里?

原谅我的无知,但我必须在这里遗漏一些东西.我可以在类中找到ruby 1.8.7的instance_eval文档Object,但我无法在1.9.2的任何地方找到它.我知道自从我使用它以来仍然支持该功能.是否有一些秘密的父类已被移至?

ruby documentation instance-eval

5
推荐指数
1
解决办法
502
查看次数

validates_one_of

我有一个表,其中包含一个布尔值的列.我希望只有一行可以将该布尔值设为true.rails支持这样的功能吗?

我正在寻找以下内容:

Table  
id | bool_value
1  | false
2  | false
3  | true
4  | false
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails

4
推荐指数
1
解决办法
1226
查看次数

伪造一个git存储库进行测试

我正在编写一个包含git调用的应用程序.我需要能够测试它(使用rspec),所以我正在归档一个git存储库并在测试执行时将其解压缩.

但是,这变得乏味,因为对测试存储库进行更改意味着重新打包所有内容.此外,我需要能够准确记住git存储库中包含的内容,这使得很难将测试存储库用于多个测试文件.

我正在寻找像fakefs这样的东西,也许我可以做类似以下的事情:

before :all do
  @test_repo = FakeGit::init
  @test_repo.add(file)
  @test_repo.commit(file, "Some message") ===> returns "SHA_ID"
end
Run Code Online (Sandbox Code Playgroud)

然后在我的测试代码的某处,我可以做类似的事情:

it "should point to a SHA_ID" do
  @test_repo.rev_parse("HEAD").should == "SHA_ID"
end
Run Code Online (Sandbox Code Playgroud)

ruby git testing rspec

3
推荐指数
1
解决办法
943
查看次数

确定没有宏的呼叫线路

是否可以在没有宏的帮助下确定调用函数的行号?

考虑以下代码:

#include <iostream>

#define PrintLineWithMacro() \
  std::cout << "Line: " << __LINE__ << std::endl;   // Line 4

void PrintLine()
{
  std::cout << "Line: " << __LINE__ << std::endl;   // Line 8
}

int main(int argc, char **argv)
{
  PrintLine();           // Line 13
  PrintLineWithMacro();  // Line 14
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

Line: 8
Line: 14
Run Code Online (Sandbox Code Playgroud)

我理解为什么每个人都会打印他们的作品 如果可以在不使用宏的情况下模仿宏功能,我会更感兴趣.

c++ macros c-preprocessor

1
推荐指数
1
解决办法
1063
查看次数

防止tcl线程被主事件循环阻塞

我试图连续运行一个线程,而不是让它被tcl主事件循环阻塞.这是我正在尝试做的一个简单示例:

#!/bin/sh
#\
exec tclsh "$0" "$@"

package require Thread

set ::a_thread [thread::create {thread::wait}]

proc start_a {} {
  thread::send $::a_thread {
    puts "Running a thread"
  }
  after 1000 a_start
}

proc infinite_loop {} {
  while {1} {
    puts "Loop"
    after 500
  }
}

start_a
infinite_loop

vwait forever
Run Code Online (Sandbox Code Playgroud)

在此代码中,infinite_loop调用proc并且主事件循环无限运行.如果a_thread仍然可以在后台运行我想它.我怎样才能做到这一点?

multithreading tcl

1
推荐指数
2
解决办法
1517
查看次数

使用Erlang生成多个外部进程

当我踏上Erlang美妙世界的旅程时,我注意到它的美丽,但更重要的是我注意到它的速度.这让我很奇怪,因为Erlang非常善于生成轻量级进程,所以将它用作其他进程的包装是否有意义.

作为一个例子,我使用rspec为ruby编写测试.假设我有10,000个测试,所有测试都可以独立运行而没有任何问题.是否有意义使用Erlang生成10,000个rspec并同时运行每个测试而不是rspec顺序运行每个测试?或者这只是一个完全荒谬的想法?

erlang performance process wrapper

1
推荐指数
1
解决办法
932
查看次数