小编Eri*_*nil的帖子

为什么在Enumerable模块中定义了Range#sum?

在Ruby 2.4和对于整数范围,Range(Enumerable)#sum优化的 直接返回一个结果,而无需遍历所有元素.

我不明白为什么enum.cEnumerable模块定义相应的代码而不是range.cRange类定义.

为什么要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)

ruby enumerable

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

如何转换ruby哈希以使值成为指向一组旧密钥的键?

我有这样的哈希:

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 hash

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

从单例类中检索Ruby对象?

可以使用以下命令从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 metaprogramming

4
推荐指数
2
解决办法
128
查看次数

(Ruby)为什么这样做?

我最近开始学习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",但我不知道为什么.我期待一串数字,因为我从未指定将这些字母转回字母.有人可以解释一下发生了什么吗?

ruby

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

如果其中一个是真的,我怎么能停止for语句呢?蟒蛇

我正在尝试检查列表是否有共同点.如果他们有一个打印"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一次,但我想只打印其中一个

python

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

计算数组中唯一数组的出现次数

我有一个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)

python counter numpy

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

NameError:rake 任务中未初始化的常量 Class::Class

我正在尝试以这样的方式进行 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 任务中做到这一点呢?任何帮助将不胜感激。谢谢。

ruby ruby-on-rails rake-task

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

如何在ruby中模拟模块中的方法?

我有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我怎么能这样做?

ruby unit-testing mocking

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

生成不在字符串列表中的子字符串列表

我有一个字符串列表和一个子串列表.我想生成一个不在字符串列表中的子字符串列表.

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"].

python string list

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

Ruby - 为什么使用Block作为参数?

我在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)

ruby block proc

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