小编but*_*y85的帖子

为什么在PostgreSQL中删除表中的一行时,以后插入的行的ID号不是连续的?

我创建下表

CREATE TABLE dogs (
  id serial,
  name VARCHAR(15),
  age integer;
Run Code Online (Sandbox Code Playgroud)

我有这样的桌子

                                  Table "public.birds"
 Column  |         Type          |                     Modifiers                      
---------+-----------------------+-------------------------------------    
 id      | integer               | not null default nextval('birds_id_seq'::regclass)
 name    | character varying(25) | 
 age     | integer               | 
Run Code Online (Sandbox Code Playgroud)

我插入两行

INSERT INTO dogs (name, age) 
VALUES ('puffy', 13),
 ('fluffy', 15);
Run Code Online (Sandbox Code Playgroud)

桌子现在看起来像这样

  id |  name  | age 
 ----+--------+-----
   1 | puffy  |  13
   2 | fluffy |  15
 (2 rows)
Run Code Online (Sandbox Code Playgroud)

然后我删除id = 2的行

DELETE FROM dogs WHERE id = 2;
Run Code Online (Sandbox Code Playgroud)

然后添加另一行

INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql nextval

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

Array#select 方法在 ruby​​ 中到底如何工作?为什么它返回一个空数组或原始数组?

我有这个代码

arr = [1, 2, 3].select do |n|
  n + 2
  puts n
end
Run Code Online (Sandbox Code Playgroud)

输出是

1
2
3
Run Code Online (Sandbox Code Playgroud)

返回值为

[]
Run Code Online (Sandbox Code Playgroud)

然后我有这个代码

arr = [1, 2, 3].select do |n|  
  n + 2
end
Run Code Online (Sandbox Code Playgroud)

返回值为

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

所以我知道 Array#select 调用从 self 传入连续元素的块,返回一个包含块返回真值的元素的数组。它在这些代码示例中的行为如何,这样我就可以理解它为什么返回这些值。

ruby arrays select arraycollection

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

如果我在方法中使用常规if语句但是在使用三元运算符时"堆栈级别太深",程序为什么会通过所有测试呢?

我正在编写名为Robot name的编码挑战.我也有测试.该计划通过了所有测试.代码在下面..

class Robot
  attr_accessor :name
  @@robots = []
  def initialize
    @name = self.random_name
    @@robots << self.name
  end

  def random_name
    name = ''
    2.times do
      name  << ('a'..'z').to_a.sample
    end
    3.times do
      name  << (1..9).to_a.sample.to_s
    end
    no_duplicate(name.upcase)
  end

  def reset
    @name = self.random_name
  end

  def no_duplicate(name)
    if @@robots.include? name
      reset
    else
      name
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您需要查看测试文件,可以在这里查找robot_name_tests.

然后我开始重构,其中一件事就是重构no_duplicate方法.所以在重构后代码看起来像这样

class Robot

  ...
  # the rest of code stayed the same

  def no_duplicate(name)
    @@robots.include? name ? reset : name
  end …
Run Code Online (Sandbox Code Playgroud)

ruby oop if-statement ternary-operator stack-level

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