相关疑难解决方法(0)

在Ruby on Rails中使用结构体提供动态常量赋值(SyntaxError)

在我的控制器中,我有以下简化代码:

def index
  @dashboard_items = []
  DashItem = Struct.new(:name, :amount, :moderated)  # Error is here

  [:page, :post].each do |c|
    obj = c.to_s.capitalize.constantize
    @dashboard_items << DashItem.new(c.to_s, obj.count, obj.count_moderated)
  end
end
Run Code Online (Sandbox Code Playgroud)

但是Ruby给出了以下错误:

动态常量赋值(SyntaxError)

在上面标出的线上.

其中,AFAIK,意味着DashItem已经定义了常量.它是否正确?该怎么办呢?

ruby struct

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

在ruby中创建惯用对象

在ruby中,我经常发现自己编写以下内容:

class Foo
  def initialize(bar, baz)
    @bar = bar
    @baz = baz
  end

  << more stuff >>

end
Run Code Online (Sandbox Code Playgroud)

甚至

class Foo
  attr_accessor :bar, :baz

  def initialize(bar, baz)
    @bar = bar
    @baz = baz
  end

  << more stuff >>

end
Run Code Online (Sandbox Code Playgroud)

我总是希望尽可能地减少样板 - 所以有没有更惯用的方式在ruby中创建对象?

ruby

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

分配实例变量的快捷方式

我正在关注Codecademy的Ruby课程,大约85%完成了.

一遍又一遍地要求你创建一个类并传入一些参数并使它们成为实例变量,例如:

class Computer
    def initialize(username, password)
        @username = username
        @password = password
    end
end
Run Code Online (Sandbox Code Playgroud)

每次,它都会要求您生成与传入的参数完全相同的实例变量.

它让我想知道是否有一种Ruby方法可以自动处理这种情况,无需每次都自己输入.

我知道你可以做到

class Computer
    def initialize(username, password)
        @username, @password = username, password
    end
end
Run Code Online (Sandbox Code Playgroud)

但那打字几乎不算少.

我做了一些搜索,发现你可以使用attr_readerlike 创建一组'getters'

class Song
    attr_reader :name, :artist, :duration
end

aSong = Song.new("Bicylops", "Fleck", 260)
aSong.artist # "Fleck"
aSong.name # "Bicylops"
aSong.duration # 260
Run Code Online (Sandbox Code Playgroud)

但据我所知,这并不是我想要的.我不是想自动创建getter和/或setter.我正在寻找的是这样的

class Person
    def initialize(name, age, address, dob) #etc
        # assign all passed in parameters to equally named instance variables
        # for example
        assign_all_parameters_to_instance …
Run Code Online (Sandbox Code Playgroud)

ruby instance-variables

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

标签 统计

ruby ×3

instance-variables ×1

struct ×1