在Ruby 2.4和对于整数范围,Range(Enumerable)#sum
在优化的 直接返回一个结果,而无需遍历所有元素.
我不明白为什么enum.c
为Enumerable
模块定义相应的代码而不是range.c
为Range
类定义.
为什么要Enumerable
知道包含它的类(例如Range
,Hash
...)并检查它们的类型而不是让这些类重写Enumerable#sum
?
见enum.c
:
return int_range_sum(beg, end, excl, memo.v);
# or
hash_sum(obj, &memo);
Run Code Online (Sandbox Code Playgroud) 我有这样的哈希:
t={"4nM"=>"Triangle", "I40"=>"Triangle", "123"=>"Square"}
Run Code Online (Sandbox Code Playgroud)
我想把它变成哈希,如:
{"Triangle" => ["4nM", "I40"], "Square" => ["123"]}
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
我开始,group_by
但然后代码变得有点复杂....
这就是我做的:
t.group_by { |k, v| v }.map { |type, group| {type => group.flatten.reject { |x| x == type } } }
Run Code Online (Sandbox Code Playgroud) 可以使用以下命令从Ruby对象访问单例类:
some_object.singleton_class
Run Code Online (Sandbox Code Playgroud)
是否可以执行反向操作:在单例类中访问原始对象?
class << some_object
# how to reference some_object without actually typing some_object?
end
Run Code Online (Sandbox Code Playgroud)
我想干这个方法:
class Example
PARENTS = []
class << PARENTS
FATHER = :father
MOTHER = :mother
PARENTS.push(FATHER, MOTHER)
end
end
Run Code Online (Sandbox Code Playgroud)
并尝试PARENTS
用更通用的东西替换类内部.
我最近开始学习ruby并且正在构建一个简单的"加密"方法.我得到了理想的结果,但我不确定为什么.
string = "This is a test"
offset = 5
def encode(string, offset)
coded = ""
string.scan(/./) do |char|
numbers = char.ord
if numbers == 32
numbers = numbers
else
numbers = numbers + offset
end
coded << numbers
end
return coded
end
puts encode(string, offset)
Run Code Online (Sandbox Code Playgroud)
我得到了所需的编码输出:"Ymnx nx f yjxy",但我不知道为什么.我期待一串数字,因为我从未指定将这些字母转回字母.有人可以解释一下发生了什么吗?
我正在尝试检查列表是否有共同点.如果他们有一个打印"x"但是如果他们不打印"y".但只有其中一个,而不是两个.码:
lista_1 = [1, 2, 4, 5, 6, 7, 8]
lista_2 = [10, 12, 16, 5, 3, 2]
for i in lista_1:
if i in lista_2:
print ('Tienen un elemento en común')
break
exit()
if i not in lista_2:
print ('No tienen ningún elemento en común')
Run Code Online (Sandbox Code Playgroud)
用这种方式打印x一次和y一次,但我想只打印其中一个
我有一个numpy数组的各种热编码numpy数组,例如;
x = np.array([[1, 0, 0], [0, 0, 1], [1, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我想计算每个独特的热矢量的出现,
{[1, 0, 0]: 2, [0, 0, 1]: 1}
Run Code Online (Sandbox Code Playgroud) 我正在尝试以这样的方式进行 rake 任务:
require 'open-uri'
namespace :news_parser do
desc 'Parsing news from 6 news sites'
task :parse_news do
load 'lib/news_parser.rb'
ProcherkParser.new.save_novelties
VikkaParser.new.save_novelties
InfomistParser.new.save_novelties
ZmiParser.new.save_novelties
VycherpnoParser.new.save_novelties
ProvceParser.new.save_novelties
end
end
Run Code Online (Sandbox Code Playgroud)
在我的代码中,lib/news_parser.rb
我有类和实例方法,它们可以在 Rails 控制台中完美运行,只需执行以下操作:
load 'lib/news_parser.rb'
ProcherkParser.new.save_novelties
Run Code Online (Sandbox Code Playgroud)
它将我需要的所有信息保存到我的数据库中。但我怎样才能在 rake 任务中做到这一点呢?任何帮助将不胜感激。谢谢。
我有number_module.rb
内容:
def power2(x)
x * x
end
Run Code Online (Sandbox Code Playgroud)
和测试用例tc_number.rb
:
require_relative('number_module')
require "test/unit"
require 'mocha/test_unit'
class TestSimpleNumber < Test::Unit::TestCase
def test_simple
assert_equal(4, power2(2) ) # how to mock power2 to return 3?
end
end
Run Code Online (Sandbox Code Playgroud)
为了练习嘲笑我想在测试用例中模拟power2 3
而不是powering by 2
我怎么能这样做?
我有一个字符串列表和一个子串列表.我想生成一个不在字符串列表中的子字符串列表.
substring_list=["100", "101", "102", "104", "105"]
string_list=["101 foo", "102 bar", "103 baz", "104 lorem"]
Run Code Online (Sandbox Code Playgroud)
我试着这样做new_list = [s for s in substring_list if s not in [i for i in string_list]]
,但这不起作用.我也尝试了各种用途,any()
但没有运气.
我想回来new_list=["100", "105"]
.
我在ruby中理解Blocks vs Procs时遇到了麻烦.我得到一个基本的想法,即proc是一个保存为对象的方法,你可以反复调用,而不必一遍又一遍地继续编写相同的代码行.
我的麻烦在于接受块作为方法中的参数.
作业问题非常简单.
编写一个接受块作为参数的方法,并反转字符串中的所有单词.
以下是他们正在寻找的答案.
def reverser(&prc)
sentence = prc.call
words = sentence.split(" ")
words.map { |word| word.reverse }.join(" ")
end
Run Code Online (Sandbox Code Playgroud)
我有两个问题 -
1 你怎么称呼这种方法,因为我放了
print reverser("Hello")
Run Code Online (Sandbox Code Playgroud)
我得到一个错误"错误的参数数量(给定1,预期为0)"
其次,为什么不写下面的方法呢?编写一个占用块的方法有什么好处?
def reverser(string)
string.split.map{|x| x.reverse}.join(" ")
end
Run Code Online (Sandbox Code Playgroud)