小编And*_*imm的帖子

范围数组的索引数组

红宝石的范围非常酷.我最终得到这样的数组:

geneRanges = [(234..25), (500..510), (1640..1653)]
Run Code Online (Sandbox Code Playgroud)

然后必须删除它们的一部分.为此我:

genePositions = geneRanges.collect {|range| range.entries }.flatten
=> [500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653]
Run Code Online (Sandbox Code Playgroud)

它们被操纵,因此一些数字被排除在外,其他数字可能被添加.我最终可能会这样:

[505, 506, 507, 600, 601, 602, 603, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654]
Run Code Online (Sandbox Code Playgroud)

如何将其转换回紧凑的范围数组?似乎反函数应该存在?我希望它能返回这样的东西:

[(505..507), (600..603), (1643..1654)]
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby arrays range

10
推荐指数
4
解决办法
2852
查看次数

为什么我不能在红宝石中做"如果为零"?

>> current_user.first_visit
=> 0
>> if current_user.first_visit
>> puts "test"
>> end
test
=> nil
Run Code Online (Sandbox Code Playgroud)

为什么打印测试?

ruby

10
推荐指数
2
解决办法
6605
查看次数

通过/ proc/mounts监视安装点更改

根据proc手册,可以通过打开"/ proc/mounts"监视linux系统中的挂载点更改,并添加文件描述符以读fd_setselect()调用.

以下代码适用于Ubuntu 9.04,而不适用于Ubuntu 10.04(2.6.32 linux内核):

int mfd = open("/proc/mounts", O_RDONLY, 0);

fd_set rfds;
struct timeval tv;
int rv;

FD_ZERO(&rfds);
FD_SET(mfd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;

int changes = 0;
while ((rv = select(mfd+1, &rfds, NULL, NULL, &tv)) >= 0) {
    if (FD_ISSET(mfd, &rfds)) {
        fprintf(stdout, "Mount points changed. %d.\n", changes++);
    }

    FD_ZERO(&rfds);
    FD_SET(mfd, &rfds);
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    if (changes > 10) {
        exit(EXIT_FAILURE);
    }
}
Run Code Online (Sandbox Code Playgroud)

可编辑的代码段.

文件描述符总是在一台机器上可读,因此它会在select调用中不断弹出.即使坐骑没有变化.

我在这里错过了什么吗?

在此先感谢您的帮助!

男人5 …

c linux filesystems mount procfs

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

|| 运算符,结果已知时返回?

我有一个类似于以下的功能:

def check
  return 2 == 2 || 3 != 2 || 4 != 5
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,Ruby会执行所有比较,即使第一个是真的,因此函数返回true.我的检查要密集得多,所以我想知道我是否应该以不同的方式解决这个问题,以避免每次都进行所有检查.

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true
Run Code Online (Sandbox Code Playgroud)

谢谢.

ruby short-circuiting

10
推荐指数
3
解决办法
3849
查看次数

对于正在进行大规模更改的程序,是否值得从java/spring/hibernate更改为rails?

我有一个项目,其核心领域正在发生巨大变化.可以使用该站点50%的核心功能,只添加50%的新功能,但我开始考虑在Rails中简单地重做产品可能会更快.发展速度非常重要.

有一些我非常喜欢java的东西 - 性能和可伸缩性非常好.我不是一个糟糕的Java开发人员,所以我的应用程序往往运行得很好 - 比我见过的Rails站点更好.我总是接受这样一种观点,即人们可能只是在使用Rails时花费更多的钱来解决问题,这可能最终会因为疯狂的生产力优势而自行解决.

我实际上非常熟悉Java.我知道在系统中添加一个基本实体仍然需要更长的时间,但我很快就会这么做,我不介意那么多.至少它很简单直接.

我的主意是:

  • 必须启动/停止服务器只是为了修复路由,延迟加载异常,控制器将出错视图等.
  • 事实上,单元/集成测试有时会产生与生产环境不同的结果(因为无法测试控制器上的注释,或者在异步服务调用期间发生延迟加载异常,或类似的事情).知道你的杰克逊是否正确地整理你的数据是另一个只有Tomcat的东西,因为它是由Spring处理的.在你测试了所有可能的东西之后,有很多东西出了问题,这坦率地惹恼了我的废话.
  • 忍受偶尔的maven/classloader问题,直到你部署到tomcat之前,这个问题不会让人头疼.当你在IDE中时,它会给人一种错觉,认为一切都是"好的".
  • 不得不花费更多精力来进行数据库迁移,而不是红宝石人.
  • 忍受Spring中的框架错误(自2009年以来该项目发生了大约5次)或Hibernate.我也不喜欢升级Spring Security并让他们不断地一次又一次地更改配置,apis和标记库.这很烦人.
  • 浪费了这么多时间将58 MB war文件上传到服务器!每当我需要部署更改时,这些都需要12分钟上传.如果我在上传之前忘了做'mvn clean',那么Spring可能会抱怨2个bean存在同名,因为我将一个bean移到一个新的包...然后我必须重新上传整个愚蠢的war文件.默认情况下,为什么"mvn package"执行时,默认情况下不会"干净"运行?!?!有时,这些框架和工具使用最愚蠢的默认设置.这在Java世界中非常普遍.
  • 不得不花费一个小时来确定框架想要插入自己的自定义实现的位置.这非常烦人.你可以花2个小时筛选谷歌和蹩脚的文档,试图找出如何覆盖Spring Security的身份验证机制......然后花费5分钟编写实际的实现.当然,他们在段落上写了段落来解释架构以及它是多么棒,但没有人关心.对于一些如此常见的东西,为什么不只是给出示例源代码并完成它?
  • 每当您想要运行集成测试时,Spring等待10-15秒即可启动.这是拖累.

我喜欢Java的一些东西.使用Spring Security可以很容易地进行基于角色的访问.身份验证从来没有那么大的收获,但我喜欢Spring内部的实现.

我也喜欢Spring的表单支持对象和@ModelAttribute.对于控制器而言,这些都是巨大的胜利,我不知道Rails是否可以做这些事情.老实说,我从不喜欢在每个动作中传递请求参数 - 当涉及到这种常见的膨胀时,Spring MVC实际上更容易使用.

能够在内存中缓存真正庞大的结构并在启动应用程序时让它们保留在内存中也是非常需要的,特别是对于这个应用程序实际上.我有一个内存中的同义词库和语法检查器,每个请求需要被调用数百次,所以内存对我来说几乎是最快的选择.

即便如此,我想我可以在2-3周内重建我所拥有的东西,然后使用rails在几周内添加所有新功能.

从好的方面来说,所有精心设计的css,html和javascript都可以移植到很少的问题.

在继续之前,我会对这个问题提出一些建议.

PS:我也可以去Spring-ROO ......但这也是一个相当大的返工.我从来没有使用JPA - 我直接使用Hibernate.我也没有使用JSP - 我正在使用Freemarker.

ruby java spring ruby-on-rails

10
推荐指数
2
解决办法
2908
查看次数

ruby中的短命名空间缩写

我对红宝石很新.我使用IronRuby,我的ruby代码有很长的命名空间:

Company:: Division::Group::Product::Package.new
Run Code Online (Sandbox Code Playgroud)

既然我多次使用这个ns有没有办法创建一个快捷方式?在c#中我添加了一个using子句,所以我不需要指定完整的前缀.

ruby ironruby namespaces

10
推荐指数
2
解决办法
1402
查看次数

参数是通过引用还是值传递给方法的?

当你将参数传递给Ruby中的方法时,任何人都可以扩展,纠正或验证我的感受.这些点中的任何一个都错了吗?我错过任何一件作品吗?

  • Ruby中的所有东西都是一个对象.
  • 变量是对象的引用
  • (将变量传入方法时):捕获变量的方法中的参数是该方法的局部变量.参数(局部变量)现在也具有对同一对象的引用.
  • 我可以改变对象(就地),当退出方法范围时,这种改变将成立.在方法范围之外引用此对象的任何变量都将反映该对象已被更改.
  • 对该参数(局部变量)的新赋值不会更改原始对象,因此当方法离开作用域时对它的任何引用都将保持不变.
  • 如果我将一个变量传递给引用Integer的方法,那么一旦该方法退出,我就无法使该变量引用一个新的Integer.

有没有办法让一个方法作为其参数之一的整数,做一些东西,也许作为副作用改变值,一旦方法退出反映了该变化.也许我只是不想"Ruby方式".

ruby pass-by-reference pass-by-value

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

如何使用Ruby打印雪人

我想要一个占位符来表示我尚未实现的单个字符串.如何在Ruby 1.9中打印雪人?

目前,我可以做到

# coding: utf-8
puts "?"
Run Code Online (Sandbox Code Playgroud)

要么

puts "\u2603"
Run Code Online (Sandbox Code Playgroud)

但是可以使用"索引条目"字段(此处提到)snowy weatherSNOWMAN或者weather, snowy打印字符吗?

我没有使用Rails.

ruby unicode

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

Rails - 使用`rails generate model`来指定不可为空的字段类型

根据rails文档

http://guides.rubyonrails.org/migrations.html

2.3支持的类型修饰符表示应该可以修改字段以允许或禁止列中的NULL,并且可以在终端上执行此操作

这就是我想要在迁移文件中出现的内容

class CreateTestModels < ActiveRecord::Migration
  def change
    create_table :test_models do |t|
      t.string:non_nullable, :null => false

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在终端上,我试过了

rails generate model TestModel non_nullable:string{null}
rails generate model TestModel 'non_nullable:string{null: false}'
Run Code Online (Sandbox Code Playgroud)

我想不出任何其他表达方式

注意:我已经知道您可以进入迁移文件并手动添加它.那不是我想要的.

ruby ruby-on-rails rails-generate rails-generators

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

如何lint YAML文件,最好是在Ruby中

我如何lint YAML文件,而不必将其上传到http://yamllint.com

例如,如果我有

people:
  1:
    :name: John Smith
    :name: Jane Smith
Run Code Online (Sandbox Code Playgroud)

如何让它警告我最后一次:name覆盖:name

我使用的是Ruby 2.1和Ubuntu 12.04.

ruby yaml

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