小编Ste*_*fan的帖子

有人可以为我解释ruby常量查找吗?

进一步来说:

  • 你什么时候需要在范围前加上::(比如::Foo::Bar)
  • 什么时候直接引用一个scoped const ok?(只是Foo::Bar)
  • 这种行为是如此混乱有充分的理由吗?

编辑:我在谈论这样的事情

module Foo
  THING = 'thing'
  module Bar
    puts THING
  end
end
#=> thing

module Foo::Bar
  puts THING
end
#=> NameError: uninitialized constant Foo::Bar::THING
Run Code Online (Sandbox Code Playgroud)

ruby constants

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

Rails有很多自我指涉

我有一个帐户模型如下(简化):

class Account < ActiveRecord::Base
    attr_accessible :account_number, :display_name, :master_account_id

    has_many :child_accounts, :class_name => "Account", :foreign_key => "id"
    belongs_to :master_account, :class_name => "Account", :foreign_key => "master_account_id"
end
Run Code Online (Sandbox Code Playgroud)

@account.master_account目前工作正常,但我也希望能够访问@account.child_accounts- 我需要做些什么才能解决这个问题?

associations ruby-on-rails-3

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

ruby包和十六进制值

半字节是四位.这意味着有16(2 ^ 4)个可能的值.这意味着半字节对应于单个十六进制数字,因为十六进制是基数16.字节是2 ^ 8,因此可以用2个十六进制数字表示,因此可以用2个半字节表示.

所以下面我有一个1字节的字符:

'一个'

那个角色是2 ^ 8:

 'A'.unpack('B*')
 => ["01000001"] 
Run Code Online (Sandbox Code Playgroud)

这意味着它应该由两个十六进制数字表示:

 01000001 == 41
Run Code Online (Sandbox Code Playgroud)

根据Ruby文档,对于Array方法包,当aTemplateString(参数)等于'H'时,它将返回一个十六进制字符串.但这就是我得到的回报:

['A'].pack('H')
 => "\xA0" 
Run Code Online (Sandbox Code Playgroud)

我的第一点是它不应该返回的十六进制值.它应该返回十六进制值41.第二点是半字节的概念,正如我上面解释的那样,意味着1个字节,它应该返回两个半字节.但在它上面插入一个0,因为它认为输入只有1个半字节,即使'A'是一个字节并且有两个半字节.很明显我在这里遗漏了一些东西.

ruby hex unpack decoding pack

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

摆动假设 - 红宝石中字符串数组的组合或排列

我有一个带有4个字符串的ruby数组

nucleotides = ['A', 'G', 'C', 'T']
Run Code Online (Sandbox Code Playgroud)

我需要4 ^ 3个字符串组合.

new_array = ['AGC', 'AGT' .. 'TTT']
Run Code Online (Sandbox Code Playgroud)

这是遗传学中的摆动假设.有人可以解释我如何使用红宝石实现这一目标.

ruby arrays permutation ruby-1.8.7

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

将attribute_accessor添加到Ruby中的单个实例

我有以下代码将实例变量添加到单个实例:

class MyClass
  def initialize(x)
    @var = x
  end
end

obj = MyClass.new(4)
obj.instance_variable_set(:@a, 5)
Run Code Online (Sandbox Code Playgroud)

是否可以动态添加attr_accessor属性,以便可以使用obj.aobj.a = ...或必须使用instance_variable_getinstance_variable_set获取并设置它?

ruby

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

计算方法在返回nil之前可以调用的次数

背景:我需要确定远程位置的记录数.记录按顺序编号(从无0间隙开始),并且只能根据其编号逐个获取.

该方法通过网络返回获取记录truthy在成功值和falsey失败时的价值.这是一个例子:

fetch_record(0) #=> true (record #0 exists)
fetch_record(1) #=> true (record #1 exists)
fetch_record(2) #=> true (record #2 exists)
fetch_record(3) #=> nil  (no record #3)
Run Code Online (Sandbox Code Playgroud)

我试图找到一种优雅的方式来计算我可以fetch_record用增加的参数调用多少次,直到它返回nil(在上面的例子中为3次).

到目前为止我尝试过的

鉴于此测试目的的简化实现:

def fetch_record(index)
  raise if index > 3 # just to prevent endless loops
  true if index < 3
end
Run Code Online (Sandbox Code Playgroud)

以下是我的尝试:

  1. 一个while具有显式计数器变量循环显然会工作,但我看起来不是很地道:

    i = 0
    i += 1 while fetch_record(i)
    i
    #=> 3
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我可以使用stepbreak显式结果值,但看起来很麻烦:

    0.step(by: 1).each …
    Run Code Online (Sandbox Code Playgroud)

ruby

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

Ruby日期计算:奇怪的输出

我观察到计算天差的ruby表达式给出了不同的输出,这取决于表达式中的空格.

Date.today             #=> #<Date: 2017-01-06 ((2457760j,0s,0n),+0s,2299161j)>
(Date.today - 60).to_s #=> "2016-11-07"
(Date.today-60).to_s   #=> "2016-11-07"
(Date.today- 60).to_s  #=> "2016-11-07"
(Date.today -60).to_s  #=> "2017-01-06" <- ???
Run Code Online (Sandbox Code Playgroud)

谁能帮我理解背后的原因?

ruby syntax whitespace date

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

如何将方法调用链接到Ruby中的`do ... end`块?

我正在做以下事情:

array_variable = collection.map do |param|
  some value with param
end
return array_variable.compact
Run Code Online (Sandbox Code Playgroud)

我可以打电话map,并compact在某种程度上一条语句,这样我就可以立即返回结果?

我正在考虑这样的事情(但可能无效):

array_variable = block_code param.compact 
# block_code here is a method for example which fills the array
Run Code Online (Sandbox Code Playgroud)

ruby ruby-block

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

什么`ruby -e"$(curl url)"`的意思是什么?

Homebrew的这一行是什么意思?

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run Code Online (Sandbox Code Playgroud)

我理解-e将在命令中包含ruby代码,但我没有得到该$()部分.美元符号支架在这里做什么?

而且非常重要的是,我在哪里可以找到相关文档?

ruby

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

ruby 从数组中添加字符串

我正在用 ruby​​ 构建一个简单的面包屑,但我不确定如何真正实现我的逻辑。

假设我有一组取自我的单词,request.path.split("/) ["", "products", "women", "dresses"] 我想将字符串推入另一个数组,所以最后我有["/", "/products", "products/women", "products/women/dresses"],我将使用它作为我的面包屑解决方案。

我不擅长红宝石,但现在我想出了以下方法

cur_path = request.path.split('/')

cur_path.each do |link|
  arr = []
  final_link = '/'+ link
  if cur_path.find_index(link) > 1
    # add all the previous array items with the exception of the index 0
  else
    arr.push(final_link)
  end
end 
Run Code Online (Sandbox Code Playgroud)

结果应该是 ["/", "/products", "/products/women", "/products/women/dresses"]

ruby ruby-on-rails

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