标签: ruby

为什么Ruby setter需要"自我".课程内的资格?

Ruby setters - 无论是由类创建(c)attr_accessor还是手动创建- 似乎是self.在类本身内访问时需要限定的唯一方法.这似乎使Ruby独自成为语言世界:

  • 所有方法都需要self/ this(像Perl,我认为是Javascript)
  • 没有方法需要self/ this是(C#,Java)
  • 只有setter需要self/ this(Ruby?)

最好的比较是C#VS红宝石,因为这两种语言都支持这句法工作就像类的实例变量的访问方法:foo.x = y,y = foo.x.C#称它们为属性.

这是一个简单的例子; Ruby中的相同程序然后是C#:

class A
  def qwerty; @q; end                   # manual getter
  def qwerty=(value); @q = value; end   # manual setter, but attr_accessor is same 
  def asdf; self.qwerty = 4; end        # "self." is necessary in ruby?
  def xxx; asdf; end                    # we can invoke nonsetters w/o "self." …
Run Code Online (Sandbox Code Playgroud)

ruby

70
推荐指数
3
解决办法
9384
查看次数

如何用Ruby删除回车?

我认为这段代码可行,但正则表达式与\ r \n不匹配.我已经在十六进制编辑器中查看了我正在阅读的数据并验证了文件中确实存在十六进制D和十六进制A模式.

我也尝试过正则表达式/\xD\xA/m和/\x0D\x0A/m,但它们也不匹配.

这是我现在的代码:

   lines2 = lines.gsub( /\r\n/m, "\n" )
   if ( lines == lines2 )
       print "still the same\n"
   else
       print "made the change\n"
   end
Run Code Online (Sandbox Code Playgroud)

除了替代方案,我很高兴知道我做错了什么(为了方便我学习).:)

ruby regex

70
推荐指数
9
解决办法
13万
查看次数

Ruby中的那些管道符号是什么?

Ruby中的管道符号是什么?

我正在学习Ruby和RoR,来自PHP和Java背景,但我不断遇到这样的代码:

def new 
  @post = Post.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml { render :xml => @post }
  end
end
Run Code Online (Sandbox Code Playgroud)

|format|部分在做什么?PHP/Java中这些管道符号的等效语法是什么?

ruby syntax

70
推荐指数
4
解决办法
3万
查看次数

具有类名的动态类定义

如何使用名称在Ruby中动态定义类?

我知道如何动态创建一个没有名称的类使用类似的东西:

dynamic_class = Class.new do
  def method1
  end
end
Run Code Online (Sandbox Code Playgroud)

但是你不能指定一个类名.我想名称动态创建一个类.

这是我想要做的一个例子,但当然它实际上并不起作用.
(注意,我不是创建类的实例而是创建类定义)

class TestEval
  def method1
    puts "name: #{self.name}"
  end
end

class_name = "TestEval"
dummy = eval("#{class_name}")

puts "dummy: #{dummy}"

dynamic_name = "TestEval2"
class_string = """
class #{dynamic_name}
  def method1
  end
end
"""
dummy2 = eval(class_string)
puts "dummy2: #{dummy2}" # doesn't work
Run Code Online (Sandbox Code Playgroud)

实际产量:

dummy: TestEval
dummy2: 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

dummy: TestEval
dummy2: TestEval2
Run Code Online (Sandbox Code Playgroud)

================================================== ====

答:使用sepp2k方法的完全动态解决方案

dynamic_name = "TestEval2"

Object.const_set(dynamic_name, Class.new) # If inheriting, use Class.new( superclass …
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming class dynamic

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

使用Ruby 1.9.3进行ruby-debug?

我刚刚更新到Ruby 1.9.3p0和Rails 3.1.1.现在,当我尝试启动服务器时,它抱怨我应该安装ruby-debug,即使它已经安装.

% rails server --environment=development --debug
=> Booting WEBrick
=> Rails 3.1.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
Exiting
Run Code Online (Sandbox Code Playgroud)

在我的Gemfile中我有

# see: http://stackoverflow.com/questions/1083451/debugging-in-ruby-1-9
gem 'ruby-debug-base19', "0.11.24"
gem 'ruby-debug19', "0.11.6"
Run Code Online (Sandbox Code Playgroud)

是否可以使用最新版本的Ruby运行调试?

ruby ruby-on-rails ruby-debug ruby-1.9.3

70
推荐指数
3
解决办法
4万
查看次数

是否有可能在PHPStorm中获得Ruby语法高亮?

我找到了这个,但老实说不知道如何安装它或是否适用.谢谢!

php ruby phpstorm

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

Rails中has_one和belongs_to之间的区别?

我想了解has_oneRoR中的关系.

假设我有两个模型 - Person并且Cell:

class Person < ActiveRecord::Base
  has_one :cell
end

class Cell < ActiveRecord::Base
  belongs_to :person
end
Run Code Online (Sandbox Code Playgroud)

我可以只使用has_one :person,而不是belongs_to :personCell模型?

不一样吗?

ruby ruby-on-rails has-one

69
推荐指数
3
解决办法
4万
查看次数

从Ruby中的字符串中提取数字

我正在使用此代码:

s = line.match( /ABCD(\d{4})/ ).values_at( 1 )[0] 
Run Code Online (Sandbox Code Playgroud)

从字符串中提取数字,如:

ABCD1234
ABCD1235
ABCD1236
Run Code Online (Sandbox Code Playgroud)

等等

它有效,但我想知道在Ruby中我还有什么其他选择吗?

我的代码:

ids = [] 
someBigString.lines.each {|line|
   ids << line.match( /ABCD(\d{4})/ ).values_at( 1 )[0] 
}
Run Code Online (Sandbox Code Playgroud)

ruby

69
推荐指数
4
解决办法
6万
查看次数

为什么这个RMagick调用会产生分段错误?

我一直在撞墙,试着弄清楚这里出了什么问题,我肯定(或者更希望)这是一个相当明显的东西,我忽略了.我使用的是Ruby 1.9.1,Sinatra 1.0和RMagick 2.13.1.ImageMagick和RMagick已正确安装并正常运行 - 我已成功操作并保存了来自irb的图像.

params数组的相关部分(为便于阅读而格式化更改):

{"admin_user_new_image_file"=>
    {
        :filename=>"freddie-on-shetland-pony.png",
        :type=>"image/png", 
        :name=>"admin_user_new_image_file", 
        :tempfile=>#<File:/var/folders/a7/a7pO5jMcGLCww9XBGRvWfE+++TI/-Tmp-/RackMultipart20100514-20700-o2tkqu-0>,
        :head=>"Content-Disposition: form-data; name=\"admin_user_new_image_file\"; filename=\"freddie-on-shetland-pony.png\"\r\nContent-Type: image/png\r\n"
    }
}
Run Code Online (Sandbox Code Playgroud)

相关代码:

post "/admin/user/:account_name/image/new/" do
  if params[:admin_user_new_image_file][:tempfile]
    thumbnail = Magick::Image.read("png:"+params[:admin_user_new_image_file][:tempfile].path).first
  end
end
Run Code Online (Sandbox Code Playgroud)

错误(第229行是以"thumbnail ="开头的行:

config.ru:229: [BUG] Segmentation fault
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.3.0]

-- control frame ----------
c:0042 p:---- s:0196 b:0196 l:000195 d:000195 CFUNC  :read
c:0041 p:0121 s:0192 b:0192 l:001ab8 d:000191 LAMBDA config.ru:229
c:0040 p:---- s:0189 b:0189 l:000188 d:000188 FINISH
c:0039 p:---- s:0187 b:0187 l:000186 d:000186 CFUNC  :call
c:0038 p:0018 …
Run Code Online (Sandbox Code Playgroud)

ruby rmagick segmentation-fault sinatra ruby-1.9.1

69
推荐指数
5
解决办法
1万
查看次数

在Rails快捷方式中检查是否为空而不是空?

我有一个我的用户的显示页面,每个属性应该只在该页面上可见,如果它不是nil而不是空字符串.下面我有我的控制器,@user.city != nil && @user.city != ""为每个变量编写相同的代码行非常烦人.我不太熟悉创建自己的方法,但我可以以某种方式创建一个快捷方式来做这样的事情:@city = check_attr(@user.city)?或者有更好的方法来缩短这个程序吗?

users_controller.rb

def show 
  @city = @user.city != nil && @user.city != ""
  @state = @user.state != nil && @user.state != ""
  @bio = @user.bio != nil && @user.bio != ""
  @contact = @user.contact != nil && @user.contact != ""
  @twitter = @user.twitter != nil && @user.twitter != ""
  @mail = @user.mail != nil && @user.mail != ""
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

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