小编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
查看次数

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

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

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
查看次数

Ruby在1行代码中读/写文件

我是Ruby的新手,我正在研究一些katas,我坚持这个愚蠢的问题.我需要将1个文件的内容复制到1行代码中的新文件中

第一次尝试:

File.open(out, 'w').write(File.open(in).read)
Run Code Online (Sandbox Code Playgroud)

很好,但是我需要关闭文件:

File.open(out, 'w') { |outf| outf.write(File.open(in).read) }
Run Code Online (Sandbox Code Playgroud)

然后关闭阅读:

File.open(out, 'w') { |outf| File.open(in) { |inf| outf.write(outf.read)) } }
Run Code Online (Sandbox Code Playgroud)

这是我想出来的,但它看起来不像我的一行代码:(

想法?

问候,

ruby code-golf

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

了解范围和数组中的ruby splat

我想明白之间的差别*(1..9),并[*1..9]

如果我将它们分配给变量,它们的工作方式相同

splat1 = *(1..9)  # splat1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
splat2 = [*1..9]  # splat2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

但是,事情变得奇怪,当我尝试使用*(1..9)[*1..9]直接.

*(1..9).map{|a| a.to_s}  # syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.'
[*1..9].map{|a| a.to_s}  # ["1", "2", "3"...]
Run Code Online (Sandbox Code Playgroud)

我猜测问题的一部分是运营商的预测?但我不确定发生了什么.为什么我无法使用*(1..9)我可以使用的相同功能[*1..9]

ruby splat

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

从数组中检索x个随机元素

我正在努力编写一个干净的方法,当传递一个字符串数组时,x返回一个总共x的数组元素的随机列表,例如.

def getrandomarrayelements(thearray, howmany)
    return [something]
end
Run Code Online (Sandbox Code Playgroud)

是的,我应该提交我现有的代码,虽然工作效果不好,但它有8行长,我觉得可以在一个代码中完成?!

ruby arrays ruby-on-rails

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

类/对象悖论的混乱

在"The Well Grounded Rubyist"(摘录)一书中,David Black谈到了"Class/Object Chicken-and-Egg Paradox".我很难理解整个概念.

有人可以用更好/更容易/类比/其他术语来解释它吗?

引用(强调我的):

这个类Class本身就是一个例子; 也就是说,它是一个Class 对象.而且还有更多.还记得上课Object吗?嗯,Object 是一个类...但类是对象.所以,Object是一个对象.而且 Class是一堂课.并且Object是一个类,并且Class是一个对象.

哪个先来?Class除非该类Object已存在,否则如何创建该类?但是,如果有一个类可以有实例,那么怎么会有一个类Object (或任何其他类)Class呢?

处理这个悖论的最好方法,至少就目前来说,是忽略它.为了让类和对象系统运行起来,Ruby必须做一些鸡蛋或鸡蛋的东西 - 然后,循环和悖论并不重要.在编程过程中,您只需要知道类是对象,被调用类的实例 Class.

(如果你想简要地知道它是如何工作的,就像这样:每个对象都有一个内部记录,它是一个实例的类,并且对象内部的记录Class指向它Class.)

ruby

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

使用#inject连接数组中的字符串

我正在上一堂在线课程,通常有一个非常简单的单行解决方案.一个问题表明,给定以下数组:

["emperor", "joshua", "abraham", "norton"]
Run Code Online (Sandbox Code Playgroud)

我必须使用#inject一个字符串,所有名称都用一个字符串连接在一起,每个名称的初始上限,如下所示:

"Emperor Joshua Abraham Norton"
Run Code Online (Sandbox Code Playgroud)

虽然这很容易用#map和完成#join,但这个特殊的练习只需要使用#inject.我提出了这样的事情:

["emperor", "joshua", "abraham", "norton"].inject("") do |memo, word|
   memo << word.capitalize << " "
end
Run Code Online (Sandbox Code Playgroud)

这会给我:

"Emperor Joshua Abraham Norton "
Run Code Online (Sandbox Code Playgroud)

其中字符串末尾的空格不作为正确的解决方案传递.

  • 如何在没有空白的情况下实现这一目标?
  • 这是否是正确的使用方法#inject,传递一个空字符串?
  • 我是否正确使用<<组合字符串?

ruby arrays string inject

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

如何在"git add -p"中为帅哥设置标签大小?

我在这里使用解决方案来更改git diff输出中的选项卡大小.这很好用git diff.

我在.gitconfig中有这些设置:

[core]    
whitespace = tabsize=4,indent-with-non-tab
pager = less -FSRX -x4
Run Code Online (Sandbox Code Playgroud)

但这些设置似乎并没有影响git add -p.如何在git add -p命令中为帅哥设置标签大小?

git version-control tabs tab-size git-add

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

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
查看次数