小编S.G*_*ami的帖子

如何在不调用新方法的情况下直接将参数传递给类?

在Ruby中,可以通过以下方式创建哈希:

Hash(a: 5, b: 6)
Run Code Online (Sandbox Code Playgroud)

可以这样创建一个数组:

Array(100)
Run Code Online (Sandbox Code Playgroud)

可以使用以下代码创建集:

require 'set'
Set[1,2,3]
Run Code Online (Sandbox Code Playgroud)

因此,如何定义一个无需调用initialize方法即可接受参数的类?

ruby

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

Kernel.pp在Ruby中引发NoMethodError

我正在使用Ruby 2.6.3

Ruby ri将pp记录为:

以漂亮的形式打印参数。

无论如何,在文件中,当我编写并运行以下代码时:

#!/usr/bin/ruby -w

Kernel.pp 'hi'
pp 'hi'
Run Code Online (Sandbox Code Playgroud)

我收到NoMethodError。

但是以下代码如何工作?

#!/usr/bin/ruby -w

pp 'hi'
Kernel.pp 'hi'
Run Code Online (Sandbox Code Playgroud)

输出:

"hi"
"hi"
Run Code Online (Sandbox Code Playgroud)

这是截图

ruby

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

Ruby 中所有魔法指令的列表

我正在寻找 Ruby 中所有魔法指令的列表。

例如:

#!/usr/bin/ruby -w
# encoding: windows-1252
# warn_indent: false
# frozen_string_literal: true
Run Code Online (Sandbox Code Playgroud)

我刚收到一个链接,提到了其中的一些。

ruby

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

在Ruby中定义String#prev方法

我已经看到Ruby的String#next可以处理非ASCII字符。说我会英语,孟加拉语和北印度语:

> 'a'.next    # => "b"
> '?'.next    # => "?"
> '?'.next    # => "?"
Run Code Online (Sandbox Code Playgroud)

哪个是对的。

现在,我想为prevString类动态定义一个方法。我可以做这个:

String.define_method(:prev) { slice(0..-2) + slice(-1).ord.-(1).chr }
> 'hit'.prev    # => "his"
> 'b'.prev      # => "a"

> '?'.prev
Traceback (most recent call last):
        4: from /home/sourav/.irb:351:in `<main>'
        3: from (irb):17
        2: from (irb):11:in `block in irb_binding'
        1: from (irb):11:in `chr'
RangeError (2325 out of char range)

Run Code Online (Sandbox Code Playgroud)

但是它应该返回以下内容:

> 'b'.prev     # => "a"
> '?'.prev    # => "?"
> '?'.prev    # …
Run Code Online (Sandbox Code Playgroud)

ruby string encoding

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

为什么重新分配字符串不会减少Ruby中的内存使用量?

我只是注意到,如果您不清除或替换字符串,则内存使用不会减少。

文件x.rb:

#!/usr/bin/ruby -w
raise(RuntimeError, 'A GNU/Linux or an Android system is needed') unless /linux/ === RUBY_PLATFORM.downcase

require 'objspace'
STDOUT.sync = true
GC.start(full_mark: true, immediate_sweep: true)

define_method(:show) { "System Memory Usage: #{::IO.readlines('/proc/meminfo').then { |x| [x[0], x[2]] }
                            .map { |x| x.split[1].to_f }.reduce(:-)./(1024).round(3)} MiB "\
                                "| Available: #{::IO.readlines('/proc/meminfo')[2].split[1].to_f./(1024).round(3)} MiB" }

define_method(:memsize) { |obj| ObjectSpace.memsize_of(obj).to_s.reverse.gsub(/\d{1,3}/).to_a.join(',').reverse << ' Bytes'}
Run Code Online (Sandbox Code Playgroud)

文件y.rb:

#!/usr/bin/ruby -w
fail(NoMemoryError, 'Not enough available memory') if ::IO.readlines('/proc/meminfo')[2].split[1].to_i < 600_000
require_relative(File.join(__dir__, 'x'))
puts show

a = '0' * 500_000_000
puts "Memory used …
Run Code Online (Sandbox Code Playgroud)

ruby memory

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

错误:未定义局部变量或顶级方法“var”

我是水晶编程语言的新手。

每当我运行此代码时:

var = ARGV.find { |x| x.split(".").size == 4 } || "0.0.0.0"

ARGV.delete(var)
Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
p Addr
Run Code Online (Sandbox Code Playgroud)

使用水晶,我得到一个错误:

Showing last frame. Use --error-trace for full trace.

In q.cr:4:8

 4 | Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
            ^--
Error: undefined local variable or method 'var' for top-level
Run Code Online (Sandbox Code Playgroud)

但每当我省略了最后一行p Addr,或更换varVar,代码似乎做工精细。

水晶版:

Crystal 0.31.1 (2019-10-21)

LLVM: 9.0.0
Default target: x86_64-pc-linux-gnu
Run Code Online (Sandbox Code Playgroud)

我的代码有什么问题?

crystal-lang

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

为什么 Date.yesterday() 在 Rails 中返回前天?

我对 有点困惑Date.yesterday(),例如:

$ rails c
Loading development environment (Rails 6.0.3.2)
irb(main):001:0> Date.today
=> Fri, 10 Jul 2020
irb(main):002:0> Date.yesterday
=> Wed, 08 Jul 2020
irb(main):003:0> Time.now
=> 2020-07-10 03:54:46.02207138 +0530
irb(main):004:0>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但如果我没记错的话,如果今天是星期五,这是真的,前一天应该是星期四,就像我在小学学到的那样。

这里发生了什么?

ruby-on-rails

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

SCSS min() 具有 px 和百分比单位

我正在编写一个小型 Rails 应用程序,其中我需要使用 min() 函数,如下所示:

img {
    width: min(75%, 250px);
}
Run Code Online (Sandbox Code Playgroud)

在 Firefox 中,通过 CSS 检查器,我可以设置它,并且它可以工作。但在 SCSS 中,我收到编译错误:

Internal Error: Incompatible units: 'px' and '%'.
Run Code Online (Sandbox Code Playgroud)

如果我使用像 这样的硬编码 px 单位min(250px, 350px),它可以工作,但使用min()根本没有意义,我可以直接使用250px,但这不是我想要的。

可以min()px%单位一起使用吗?

sass

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

同时指定 -O2 和 -O3

有些程序已经使用 -O2 标志,如果我使用 -O3 标志,程序将使用 -O2 和 -O3 进行编译,如任务管理器或/proc/PID/cmdline.

例如,我使用的是用 Clang 和完整 LTO 构建的 Linux 内核。即使我在 dkms 配置中有这些行:

# /etc/dkms/framework.conf
export LLVM=1
export CC=clang
export CFLAGS="-O3 -march=native"
Run Code Online (Sandbox Code Playgroud)

现在,DKMS 模块使用-O2-O3标志进行编译。在这种情况下,实际使用哪个标志?

gcc clang compiler-optimization

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

在 Crystal lang 中杀死一个线程

我写了一个程序,一个水晶程序,用 Sieve 计算一个范围内的素数。

代码

#!/usr/bin/env crystal

def sieve(max)
    t = Thread.new do
        dot, ary, colours = ".", ["\xE2\xA0\x81", "\xE2\xA0\x88", "\xE2\xA0\xA0", "\xE2\xA0\x84"] * 2, [154, 184, 208, 203, 198, 164, 129, 92]
        print "\e[?25l"

        loop do
            ary.size.times do |x|
                print("\e[2K#{ary[x]} \e[38;5;#{colours[x]}mPlease Wait#{dot * x}\e[0m\r")
                sleep(0.1)
            end
        end
    end

    s = [nil, nil] + (2..max).to_a
    s.each do |x|
        next unless x
        break if (sq = x ** 2) > max
        (sq..max).step(x) { |y| s[y] = nil }
    end

    puts "\e[?25h"
    s.tap { …
Run Code Online (Sandbox Code Playgroud)

multithreading crystal-lang

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