在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.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 中所有魔法指令的列表。
例如:
#!/usr/bin/ruby -w
# encoding: windows-1252
# warn_indent: false
# frozen_string_literal: true
Run Code Online (Sandbox Code Playgroud)
我已经看到Ruby的String#next可以处理非ASCII字符。说我会英语,孟加拉语和北印度语:
> 'a'.next # => "b"
> '?'.next # => "?"
> '?'.next # => "?"
Run Code Online (Sandbox Code Playgroud)
哪个是对的。
现在,我想为prev
String类动态定义一个方法。我可以做这个:
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) 我只是注意到,如果您不清除或替换字符串,则内存使用不会减少。
文件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) 我是水晶编程语言的新手。
每当我运行此代码时:
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
,或更换var
同Var
,代码似乎做工精细。
水晶版:
Crystal 0.31.1 (2019-10-21)
LLVM: 9.0.0
Default target: x86_64-pc-linux-gnu
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题?
我对 有点困惑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)
但如果我没记错的话,如果今天是星期五,这是真的,前一天应该是星期四,就像我在小学学到的那样。
这里发生了什么?
我正在编写一个小型 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
和%
单位一起使用吗?
有些程序已经使用 -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
标志进行编译。在这种情况下,实际使用哪个标志?
我写了一个程序,一个水晶程序,用 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)