小编one*_*nch的帖子

Ruby中的Nil和boolean

有人可以解释这个推理吗?花了30分钟试图弄清楚为什么我的布尔方法返回nil并发现在Ruby中:

2.2.1 :001 > nil && true
 => nil
2.2.1 :002 > nil && false
 => nil
Run Code Online (Sandbox Code Playgroud)

由于nil是假值,我原以为输出nil && true是假的.此外,它似乎违背了条件运算符应返回布尔值的想法.

这背后的理由是什么?

更新

因此布尔运算符不可交换是有道理的:即

nil && false != false && nil
Run Code Online (Sandbox Code Playgroud)

对于其他人看到这一点,我的问题是在rails中我有一个声明,如:

def some_method?
  object.attr && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)

但是当object.attr为nil时,函数将为nil.在大多数情况下这很好,但是当将布尔方法链接在一起时,并没有那么多.我改为将其更改为:

def some_method?
  object.attr.present? && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)

你可以用vanilla Ruby做同样的事情:

def some_method?
  !!object.attr && object.attr > something
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

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

忽略多行注释git diff

我试图找到只有源代码发生变化的C/C++源代码的重大差异.我知道你可以使用git diff -G<regex>它,但它似乎非常有限的可以运行的正则表达式.例如,它似乎没有提供忽略C/C++中多行注释的方法.

在运行差异之前,git或者libgit2中是否有任何方法可以忽略注释(包括多行),空格等?或者一种确定diff输出中的一条线是否是注释的方法?

c c++ regex git libgit2

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

如何在Capybara和Selenium中打开浏览器

我是Capybara的新手,也从未使用过Selenium.我在MacOSX上的rails项目上做了一个ruby,无论出于何种原因,当我运行测试时,浏览器窗口永远不会打开.我的堆栈是:Capybara,Selenium,Rspec,Ruby on Rails.我的测试如下:

describe 'Downloads', js: true do

context ' compress zip and download file' do
  before do
    Capybara.current_driver = :selenium
    session = Capybara::Session.new(:selenium)
    session.visit '/users/sign_in'
    find('#tab_signin').click
    within("#new_user") do
      fill_in 'user_login', :with => 'admin@local.host'
      fill_in 'user_password', :with => 'password'
    end
    click_button 'Sign in'
end

it 'downloads the project and navigates to downloads page' do
  visit 'some/path'
  within '.create-download' do
    find(:select).find("option[value='zip']").select_option
  end
  sleep 3
  page.should have_css('#download-modal.in')
end
Run Code Online (Sandbox Code Playgroud)

结束

我还尝试将我的features/support/env.rb中的内容更改为:

Capybara.javascript_driver = :selenium
Capybara.register_driver :selenium do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  Capybara::Selenium::Driver.new(app, :browser …
Run Code Online (Sandbox Code Playgroud)

javascript selenium rspec ruby-on-rails capybara

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

无效的fullName:`model:@ each`,必须是`type:name`形式

我在本教程之后使用Ember CLI和Rails后端设置了一个新的应用程序但是当我为我的某个模型设置路由时,我收到以下错误:

Error while processing route: inks.index Invalid fullName: `model:@each`, must be of the form `type:name`  TypeError: Invalid fullName: `model:@each`, must be of the form `type:name` 
at __exports__.default.EmberObject.extend.resolve (http://localhost:4200/assets/vendor.js:16772:17)
at Object.resolve [as resolver] (http://localhost:4200/assets/vendor.js:16394:25)
at resolve (http://localhost:4200/assets/vendor.js:14930:32)
at Object.Container.resolve (http://localhost:4200/assets/vendor.js:14510:16)
at factoryFor (http://localhost:4200/assets/vendor.js:15013:31)
at Object.Container.lookupFactory (http://localhost:4200/assets/vendor.js:14617:16)
at Ember.Object.extend.modelFactoryFor (http://localhost:4200/assets/vendor.js:74810:31)
at JSONSerializer.extend.extractArray (http://localhost:4200/assets/vendor.js:67710:22)
at apply (http://localhost:4200/assets/vendor.js:32851:27)
at superWrapper (http://localhost:4200/assets/vendor.js:32419:15) 
Run Code Online (Sandbox Code Playgroud)

我用Google搜索,但我不知道它甚至意味着什么.我已经检查过以确保我有ActiveModelAdapter和Serializer.该模型并不复杂:

我的路线是app/routes/users/index.js:

import Ember from 'ember';

export default Ember.Route.extend({
 model: function() {
    return this.store.find('user'); 
 }
});
Run Code Online (Sandbox Code Playgroud)

app/router.js: …

ruby-on-rails ember.js

5
推荐指数
2
解决办法
756
查看次数

更新 MacOSX 后 GPG 签名 Git 提交在密码输入时挂起

我认为这种情况是在我更新最新的 OSX 版本后开始发生的,该版本可能包含也可能不包含新版本的 Git。但现在,几乎每次我尝试签署我的提交(通过git commit -Sgit rebase -S):

  1. 我收到密码提示
  2. 输入密码
  3. 按 Enter 键,什么也没有发生。没有“权限被拒绝:密码无效”,什么也没有。
  4. 我必须按 Ctrl-C 才能退出提示。

不确定这是否是 Git 或 El Capitan 10.11.6 上的已知问题,但它变得令人烦恼,因为我总是签署我的 git 提交。

我还检查了没有其他 GPG 进程正在运行,什么也没有。

git macos gnupg

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

通过adb shell启动SL4A应用程序

我尝试过各种各样的开始活动,包括此链接Google规定的在SL4A中启动后台脚本的方法.

但是我只需要知道通过adb shell打开实际SL4A应用程序的命令.令人困惑的是,应首先启动大量代码中的哪些活动.还有命令:

adb shell am start...
Run Code Online (Sandbox Code Playgroud)

没有最好的文档.有人可以请给我从adb启动SL4A的命令吗?

非常感谢

python android adb sl4a

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

在Rails ActiveRecord中访问和设置对象

我在Rails 3.2中有一个类,我们将调用Foo,其中另一个类叫做Bar(两个ActiveRecords),如下所示:

class Bar < ActiveRecord::Base
 attr_accessible :name
end


class Foo < ActiveRecord::Base
  has_one :bar

  def bar_name
    if bar
      bar.name
    else
      nil
  end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试调用bar_name时,我得到一个mysql错误,如下所示:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'bar.foo_id' in 
 'where clause': SELECT  `bar`.* FROM `bar`  WHERE `bar`.`foo_id` = 1 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么Rails试图通过foo的id选择bar,当我明显想要bar by foo的bar_id属性时.

如果需要更多解释,请告诉我.

ruby mysql activerecord ruby-on-rails ruby-on-rails-3

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

如何以编程方式回答Android 4.0.3中的呼叫?

因此,作为主题,我需要能够在HTC OneX上以Android 4.0.3编程方式接听电话.我已经读过几个地方,MODIFY_PHONE_STATE谷歌已经撤销了这项权限,所以要完成这项任务,你需要一个解决方法.

到目前为止,我已经研究过两个途径:

(1)随着盖伊的帖子在这里使用一个BroadcastReceiver

(2)使用以下代码尝试通过shell命令触发键事件.

final Runtime r = Runtime.getRuntime();
    try {
        Process process = r.exec("input keyevent 5");
        InputStream stream = process.getErrorStream();
        log.v("Process Error Stream: " +stream.toString());
        log.v("Sending shell command to Answer Call");
    } catch (Exception e) {
        log.v("Stack Trace: " + e.getStackTrace().toString());
        e.printStackTrace();
    } 
Run Code Online (Sandbox Code Playgroud)

我使用这个是因为keyevent 5是根据谷歌的KeyEvent.CALL而且它在adb中使用

adb shell input keyevent 5
Run Code Online (Sandbox Code Playgroud)

我的问题是,我做错了什么?因为逻辑上这两种方法都有意义,但它们都不起作用,甚至不会产生任何类型的运行时错误.

干杯

android runtime.exec adb broadcastreceiver

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

C++ ifstream getline不能正常工作

我试图用c ++中的配置文件读取一些值,getline但似乎没有用.

代码的相关部分如下所示:

#include <iostream>
#include <fstream>
#include <unistd.h>
using namespace std;
// ...
ifstream config( configPath );
  string line;

  Message( DiagVerbose, "CONFIG: %s\n", configPath.c_str());
  bool exists = ( access( configPath.c_str(), F_OK && R_OK ) != -1 );
  Message( DiagVerbose, "Exists?: %s\n", exists ? "true" : "false");

  // This was causing a fail bit to set 
  //config.open( configPath );
  if (config.is_open())
  {
    Message( DiagVerbose, "Config is open%s\n", config.good() ? "good" : "bad" );
    while ( getline( config, line …
Run Code Online (Sandbox Code Playgroud)

c++ fstream

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