标签: ruby

在Ruby中,coerce()实际上是如何工作的?

据说,当我们有一个班级Point并知道如何执行point * 3如下操作:

class Point
  def initialize(x,y)
    @x, @y = x, y
  end

  def *(c)
    Point.new(@x * c, @y * c)
  end
end

point = Point.new(1,2)
p point
p point * 3
Run Code Online (Sandbox Code Playgroud)

输出:

#<Point:0x336094 @x=1, @y=2>
#<Point:0x335fa4 @x=3, @y=6>
Run Code Online (Sandbox Code Playgroud)

但是之后,

3 * point
Run Code Online (Sandbox Code Playgroud)

不明白:

Point不能强迫进入Fixnum(TypeError)

所以我们需要进一步定义一个实例方法coerce:

class Point
  def coerce(something)
    [self, something]
  end
end

p 3 * point
Run Code Online (Sandbox Code Playgroud)

输出:

#<Point:0x3c45a88 @x=3, @y=6>
Run Code Online (Sandbox Code Playgroud)

所以据说3 * point是一样的3.*(point).也就是说,instance方法 …

ruby coercion coerce type-coercion

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

何时使用node.js vs sinatra vs rails?

这3种语言/框架的最佳用途是什么?混合所有这些(或2)是否有用?

javascript ruby ruby-on-rails node.js

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

Ruby:console.log?

我最近在JavaScript程序的每一行中都放了console.log语句,发现它现在更容易理解.有没有办法用服务器端代码,特别是Ruby?我认为没有办法在萤火虫中读取它,但是它会在irb中可见吗?我将在Ruby代码中放入哪些console.log等效语句?

ruby

60
推荐指数
2
解决办法
6万
查看次数

仅在存在时调用方法

是否存在一些隐藏的Ruby/Rails-magic,只有在它存在时才调用方法?

让我们说我想打电话

resource.phone_number
Run Code Online (Sandbox Code Playgroud)

但我事先不知道资源是否响应phone_number.一种方法是

resource.phone_number if resource.respond_to? :phone_number
Run Code Online (Sandbox Code Playgroud)

如果在错误的地方使用,那就不是那么好了.我很好奇,如果存在的东西更像是如何try使用(resource.try(:phone_number)).

ruby ruby-on-rails

60
推荐指数
3
解决办法
6万
查看次数

类变量的Attr_accessor

attr_accessor不适用于以下代码.错误说" undefined method 'things' for Parent:Class (NoMethodError)":

class Parent
  @@things = []
  attr_accessor :things
end
Parent.things << :car

p Parent.things
Run Code Online (Sandbox Code Playgroud)

但是以下代码有效

class Parent
  @@things = []
  def self.things
    @@things
  end
  def things
    @@things
  end
end
Parent.things << :car

p Parent.things
Run Code Online (Sandbox Code Playgroud)

ruby

60
推荐指数
4
解决办法
5万
查看次数

Integer和Fixnum有什么区别?

我知道Fixnum该类继承自Integer该类.但它们之间的实际区别是什么?是否有任何用例我们有时使用Fixnum,有时使用Integer

ruby

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

在Ruby中捕获异常后重新获取(相同的异常)

我试图通过捕获异常来提高我的Ruby技能.我想知道当你有几个方法调用时,是否通常会重新提出相同类型的异常.那么,以下代码是否有意义?是否可以重新引用相同类型的异常,或者我不应该在处理方法上捕获它?

class Logo
  def process
    begin
      @processed_logo = LogoProcessor::create_image(self.src)
    rescue CustomException
      raise CustomException
    end
  end
end

module LogoProcessor
  def self.create_image
    raise CustomException if some_condition
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby exception

60
推荐指数
3
解决办法
2万
查看次数

"错误的参数数量(1为0)"在Ruby中意味着什么?

"参数错误:错误的参数数量(1表示0)"是什么意思?

ruby

59
推荐指数
2
解决办法
9万
查看次数

雾和AWS警告:无法加载'unf'宝石

自上次捆绑更新以来,rails控制台中的每个操作(rails服务器,rails控制台,db:migrate等)都会发出警告:

[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
Run Code Online (Sandbox Code Playgroud)

我确定我没有更改我的application.rb文件中的AWS字符串中的任何内容:

    # Amazon S3 credentials
ENV["AWS_ACCESS_KEY_ID"] = "AWS_ACCESS_KEY_ID"
ENV["AWS_SECRET_ACCESS_KEY"] = "AWS_SECRET_ACCESS_KEY"
ENV["AWS_S3_BUCKET"] = "my-bucket"
Run Code Online (Sandbox Code Playgroud)

我的gemfile中没有这个"unf"gem.我应该加吗?

ruby ruby-on-rails amazon-web-services fog

59
推荐指数
3
解决办法
1万
查看次数

rbenv,rvm和chruby有什么区别?

我是Ruby和Rails的新手.我正在寻找一个纯粹客观的功能列表,每个功能和优点/缺点.为了保持偏好,除非您使用了所有3个系统,否则请不要回答.

ruby rvm rbenv chruby

59
推荐指数
1
解决办法
3万
查看次数