我创建下表
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) 我有这个代码
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 传入连续元素的块,返回一个包含块返回真值的元素的数组。它在这些代码示例中的行为如何,这样我就可以理解它为什么返回这些值。
我正在编写名为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 ×2
arrays ×1
database ×1
if-statement ×1
nextval ×1
oop ×1
postgresql ×1
select ×1
sql ×1
stack-level ×1