小编Rya*_*cox的帖子

在Objective-C中复制块(即:将它们复制到实例变量)

我想了解块.当直接传递给方法时,我得到了正常使用它们的方法.我现在感兴趣的是一个块,将它(例如)存储在一个实例变量中并稍后调用它.

块编程指南听起来像我可以做到这一点,通过使用Block_copy/retain来复制块,但是当我尝试运行它时,我崩溃了我的程序.

- (void) setupStoredBlock
{
    int salt = 42;
    m_storedBlock = ^(int incoming){ return 2 + incoming + salt; };
    [m_storedBlock retain];
}
Run Code Online (Sandbox Code Playgroud)

我试着稍后再说:

- (void) runStoredBlock
{
    int outputValue = m_storedBlock(5);
    NSLog(@"When we ran our stored blockwe got back: %d", outputValue);
    [m_storedBlock release];
}
Run Code Online (Sandbox Code Playgroud)

有人有任何见解吗?(或者,有什么东西我没有用积木?)

非常感谢你!

cocoa objective-c objective-c-blocks

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

使用酶测试React组件状态的变化并监视实例方法

我正在开发一个包装器组件,用于在React中平滑地加载图像.我使用含有mocha,chai和sinon的酶对我的组件进行单元测试.在这里的测试中,我试图测试:

  1. 加载图像时更新组件的状态

  2. onLoad调用组件上的实例方法

const wrapper = shallow( );

const onLoad = wrapper.find('img').props().onLoad;
const onLoadSpy = sinon.spy(onLoad); wrapper.update();
const status = wrapper.state().status;
expect(onLoadSpy).to.have.been.called;
expect(status).to.equal('LOADED');

我发现状态更新既不会被酶反映,也不会更新onLoad间谍的通话计数.这是测试的相应代码:

export default class Image extends Component {
  constructor(props) {
    super(props);
    if (props.src != null && typeof props.src === 'string') {
      this.state = {
        status: LOADING,
      };
    } else {
      this.state = {
        status: PENDING,
      };
    }
    this.onLoad = this.onLoad.bind(this);
  }

  onLoad() {
    this.setState({
      status: LOADED,
    });
  }

  render() {
    //lots of code above …
Run Code Online (Sandbox Code Playgroud)

javascript sinon reactjs enzyme chai-enzyme

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

使用-xrefs,Rcov覆盖范围发生了巨大变化

我目前的Ruby on Rails项目通过rcov进行测试(特别是相关性rcov,我们有相当高的标准(如果我们的代码覆盖率<95%,我们就会失败).

我们使用以下命令来测试它:

rcov_cmd = "rcov --rails --text-summary \
            --include #{included_dirs} \
            --exclude #{excluded_dirs} \
            --aggregate #{coverage_dir}/coverage.data \
            --output #{coverage_dir} \
Run Code Online (Sandbox Code Playgroud)

今天我发现了一些在rcov报告中注册绿色(运行)的代码.Homever,我可以证明这段代码没有运行(我在函数的开头引发异常,我的单元测试通过)

我做了一些研究,发现了rcov的--xrefs标志,我认为这会为rcov报告中的每一行添加所有呼叫者.

我将rcov命令更改为:

rcov_cmd = "rcov --rails --text-summary --xrefs \
        --include #{included_dirs} \
        --exclude #{excluded_dirs} \
        --aggregate #{coverage_dir}/coverage.data \
        --output #{coverage_dir} \
Run Code Online (Sandbox Code Playgroud)

(注意添加的--xrefs标志).

我没有额外的呼叫信息,而是将测试覆盖率从96%提高到48%.

--xrefs是否会改变rcov的分析方式?(我认为它只会收集呼叫信息).这与第一个命令有什么不同/更好?(如果单元测试失败,我已经看到单元测试覆盖率会下降,而且我知道如果运行中出现错误,覆盖百分比会下降,但对我来说看起来不错)

ruby ruby-on-rails rcov

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

从从stdin读取的Ruby脚本调用时不要停止

我创建了一个控制台Ruby脚本,它使用ARGF从文件或stdin加载数据,然后调用Pry.

当我使用stdin传递数据时,当我传递文件(Pry暂停)但失败(Pry不停止并且只退出Ruby)时,这很有效.

这很奇怪,有谁知道为什么?我想通过stdin传递数据并让Pry暂停.

看,一个示例脚本:

require 'rubygems'
require 'pry'


def pry_it(str)
    binding.pry
end

pry_it(ARGF.read)
Run Code Online (Sandbox Code Playgroud)

当我用ARGV中的文件调用此应用程序时,我得到了正确的回复 - 撬开暂停

% bundle exec ruby pry_test.rb file.txt

From: /Users/wilcoxr/Development/json_pry/pry_test.rb @ line 8 Object#pry_it:

    6: def pry_it(str)
    7:
 => 8:  binding.pry
    9: end

[1] pry(main)>
Run Code Online (Sandbox Code Playgroud)

大!我可以随心所欲地执行Pry命令

当我尝试使用STDIN将数据发送到我的工具时:

% cat file.txt | bundle exec ruby pry_test.rb

From: /Users/wilcoxr/Development/json_pry/pry_test.rb @ line 8 Object#pry_it:

    6: def pry_it(str)
    7:
 => 8:  binding.pry
    9: end

[1] pry(main)>
% 
Run Code Online (Sandbox Code Playgroud)

仔细观察:注意我回到了我的shell提示符,而不是在IRB中暂停.奇怪的!我不明白为什么我会得到这种行为....

ruby pry

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

部署到系统范围的RVM的Capistrano没有看到已安装的Rubies

我在我的服务器上使用系统范围的Ruby安装,并尝试部署到RVM gemset(如rvm使用1.9.2@gemset_name)

当我运行我的Cap文件时,Cap pukes并说没有安装Ruby.

但是,实际上安装了Ruby.(部署用户是rvm组的一部分,可以rvm use在命令行上手动完成.)

我可能做错了什么?

Capfile的相关部分

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.

require "bundler/capistrano"
require "rvm/capistrano"
require "erb"

set(:rvm_type)          { :system }
set(:ruby_version)      { '1.9.2' }
set(:rvm_ruby_string)   { "#{ruby_version}@#{application}" }
set(:rvm_path)          { "/usr/local/rvm" }
#set(:rvm_bin_path)      { "#{rvm_path}/bin" }

before "deploy:setup",    "rvm:debug_gemset"
before "deploy:setup",    "bundle:install_gem"

namespace :rvm do
  desc "Creates gemset for application"
  task :debug_gemset do
    disable_rvm_shell do
      run "/usr/local/rvm/bin/rvm list rubies" do |ch, stream, data|
        if stream == :err
          logger.debug …
Run Code Online (Sandbox Code Playgroud)

ruby capistrano ruby-on-rails rvm

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

每秒测量出站请求?

我有一个Web应用程序,该应用程序使用ActiveResource与另一台具有连接速率限制的服务器通信。我很好奇如何才能最好地从运行我的Web应用程序的主机上进行监视,即从服务器上linux上的bash提示符下,如何测量我的计算机每秒向另一台计算机发出的出站请求?

我正在寻找给定接口,主机名和/或它们的某种组合的Linux单行程序,它告诉我与该服务器的连接速率。我已经接近使用tc和iftop之类的工具,但是这些工具报告的是所传输的数据量,而不是所建立的连接……所以它并不是我所要寻找的。我很想看类似的东西:


$ awesometool --host thetargethost.com --interface eth0 --interval 5

收集统计数据…

接口eth0上针对targethost.com的每秒请求报告

平均:23请求/秒最小值:12请求/秒最大值39请求/秒

抽取了5个样本


谁能指出我一个人?

ruby linux networking activeresource

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

Groovydoc:记录命名参数

我创建了一个这样的方法:

void myMethod(Map kwArgs, def myParam)
{
   println kwArgs.firstName
   println [kwArgs.lastName, "Wilcox"].find()  
   // ^^^ if lastName named parameter not specified, "Wilcox"

   ....
}
Run Code Online (Sandbox Code Playgroud)

现在是时候用 GroovyDoc 来记录这个方法了。部分很容易

/**
  myMethod rules the world
  @param myParam something something
Run Code Online (Sandbox Code Playgroud)

但是我如何记录命名参数?(同样,如何指定lastName参数具有默认值?(即,是否可以设置一些元数据,或者只是在英文描述中向读者明确说明?)

groovy

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

仅在启用+ python时加载插件

我有一个插件,只有在使用+ python pythonhelper编译vim时才会运行.我与许多机器共享我的.vim,有些机器没有打开python模式编译的vim.

所以,我想知道:是否有一个vim命令,我可以放入我的vimrc所以我可以有条件地包含插件?

就像是:

if PYTHON_FEATURE_ENABLED
    add the pythonhelper to the runtimepath...
end
Run Code Online (Sandbox Code Playgroud)

我知道我可以修改vim的runtimepath以包含插件,但在.vimrc中执行这种条件的vim语法是什么?

vim

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