小编Ste*_*fan的帖子

具有不寻常语法的Ruby方法

我有一些方法:

def example_method
  I ? world!
end
Run Code Online (Sandbox Code Playgroud)

我对这个方法有两个问题:

  1. 由于不存在引号(example_method不是我的方法),这种方法怎么可能不会返回错误.
  2. 我的问题是,如何使这个方法返回'I ? too!'字符串而不重新定义,重写此方法.

第2点是我必须解决的练习.

谢谢!

ruby

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

如何在ruby中将"+ ="转换为运算符

我可以转换"+","-""/"运营商使用2.send("-",3)

但它不起作用 "+="

a = 2
a += 2 #=> 4

a = 2
a.send("+=", 4) #=> NoMethodError: undefined method `+=' for 2:Fixnum
Run Code Online (Sandbox Code Playgroud)

我试图先转换符号; 但也行不通;

怎么解决这个问题?

ruby

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

在ruby中,如何找到给定字符串的第一个非空白字符的索引

在ruby中,如何查找给定字符串的第一个非空格(非制表符,非空格,非换行符)的索引.

例如,给定字符串"\t\nstring",第一个非制表符,非空格字,非换行符的索引将是2,即's'.

ruby regex

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

红宝石的范围可以从Float开始吗?

我是红宝石的初学者,试图用它来帮助我分析生物数据.我需要尝试将一组数据(数组中的数字)与具有特定特异性的数据(例如数字+/- 0.25)相匹配我已经提出这个(到目前为止)将一个数据集更改为范围而不是数字:

def range(arr)
  c = []
  arr.each do |b|
    b = (b-0.25..b+0.25)
    b = b.to_a
    c << b
  end
  c = c.flatten
  return c
end
Run Code Online (Sandbox Code Playgroud)

代码给出了所需的数组,但我总是得到

TypeError: can't iterate from Float.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

背景

这是我的实际数据样本:

119.0456 119.0714 119.0721 119.0737 120.0772 130.0746 131.0737 136.0721 140.0951 143.0697 154.038 154.0744 154.1108 155.0949 156.054 169.053 170.1422 171.0646 171.0686 174.0644 174.0795 180.0539 182.1059

我需要将它与理论集匹配,我需要生成容差为0.002我正在逐步编写代码以生成我的理论集,因为我还是新编码,只是想知道如何在我的理论集合周围创建一个+/- 0.002的范围,以使其与实际的一致.

ruby

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

如何在Ruby中比较不同时区的时间?

我有这个时区偏移格式的日期,我需要将其转换为 UTC 格式。例如:

日期 1 = 2017-07-13T17:13:12-04:00

date2_utc = 2017-07-13 21:13:12 UTC

我需要比较这两个日期是否相同。或者,如果我可以将 date1 转换为 UTC,那么我可以比较这两者。

ruby time date ruby-on-rails-3

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

如何在 Ruby 中打印转义字符?

我有一个包含转义字符的字符串:

word = "x\nz"
Run Code Online (Sandbox Code Playgroud)

我想将其打印为x\nz.

但是,puts word给了我:

x
z
Run Code Online (Sandbox Code Playgroud)

如何获得puts word输出x\nz而不是创建新行?

ruby ascii escaping

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

无法使用 Date.commercial 方法找到第 53 周的开始

Date.commercial 找到一周开始(星期一)的方法在第 53 周不起作用

Date.commercial(2018, 1, 1)
#=> 2018-01-01
Date.commercial(2018, 52, 1)
#=> 2018-12-24
Run Code Online (Sandbox Code Playgroud)

当我尝试在有 53 周的年份中查找第 53 周的星期一时,它会引发错误。

Date.commercial(2018, 53, 1)
# ArgumentError: invalid date
Run Code Online (Sandbox Code Playgroud)

此外,它的定义对我来说也不清楚。就像这两个人的行为如此不同:

Date.commercial(2015, 1, 1)
#=> 2014-12-29

Date.commercial(2016, 1, 1)
#=> 2016-01-04
Run Code Online (Sandbox Code Playgroud)

我认为这是因为Date.commercial()将周数转换为日期的定义与Date.strftime("%W"). 是否有任何方法可以将年份的周数转换为与 一致的星期几Date.strftime("%W"),即 的反向函数Date.strftime("%W")

ruby ruby-on-rails week-number ruby-on-rails-5

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

从数组的散列中选择属性中的最高值

我有这个哈希:

h = {
  124 => ["shoes", "59.99"],
  456 => ["pants", "49.50"],
  352 => ["socks", "3.99"]
}
Run Code Online (Sandbox Code Playgroud)

每个值都有两个元素.他们是一个名称(如"shoes","pants","socks")和价格(例如"59.99","49.50""3.99").我需要选择价格最高的价值.这124对价格来说至关重要"59.99".如何选择价格最高的哈希?

我试过这个:

h.select{ |x| x[1] }.max
#=> [456, ["pants", "49.50"]]
Run Code Online (Sandbox Code Playgroud)

但这给了我最大值并返回键456.

ruby arrays hash

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

Rails - 将时间转换为字符串

这是我要转换的时间格式

time = Time.parse('2020-07-02 03:59:59.999 UTC')
#=> 2020-07-02 03:59:59 UTC
Run Code Online (Sandbox Code Playgroud)

我想以这种格式转换为字符串。

"2020-07-02T03:59:59.999Z"
Run Code Online (Sandbox Code Playgroud)

我试过了。

time.strftime("%Y-%m-%dT%H:%M:%S.999Z")
Run Code Online (Sandbox Code Playgroud)

这样对吗?有什么更好的办法吗?

ruby time datetime ruby-on-rails

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

如何简化在 Ruby 中创建深度嵌套的哈希?

我目前有:

@teams ||= {}
@teams[date] ||= {}
@teams[date][team] ||= {}
@teams[date][team][raw_address] ||= {}
@teams[date][team][raw_address]['address'] = address
@teams[date][team][raw_address]['orders'] ||= {}
@teams[date][team][raw_address]['orders'][order.id] = order
Run Code Online (Sandbox Code Playgroud)

是否可以“删除”包含||= {}? 我只想有这样的东西:

@teams[date][team][raw_address]['address'] = address
@teams[date][team][raw_address]['orders'][order.id] = order
Run Code Online (Sandbox Code Playgroud)

ruby optimization hash

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