Tag: 符号

无法在Ruby中获得符号的悬念

我一直在寻找过去几天如何理解Ruby中的符号。 我在Google上阅读了关于Ruby符号的所有文章,其中大多数都是错误的解释,所以我来到这里,我看到有关于这个主题的一些问题,但我不明白,对不起。 根据我的阅读,我理解符号是不可变的和唯一的,因此内存消耗和性能优于常规字符串。 问题#1 生活中的符号目的是为字符串提供同样的利基吗? 符号的目的是在没有携带值的情况下作为方便的常量运行,就像之后的部分:它是实际值吗? 问题2 我什么时候才知道在哪里使用符号? 我会高度评价你自己对符号的解释,而不是链接到谷歌上的文章(我确保我已经阅读过了!)。 如果你能提供更多关于符号的信息,我也会提供你的时间,因为我根本不理解它们,甚至不存在于:symbol_something,它是参考还是什么? 非常感谢您的帮助!

什么:这意味着Ruby on Rails?

我是Ruby和Ruby on Rails世界的新手。 我已经阅读了一些指南,但我在使用以下语法时遇到了一些麻烦。 我认为在Ruby中使用:condition语法来定义具有某种访问器的类属性,例如: class Sample attr_accessor :condition end 隐式声明“条件”属性的getter和setter。 虽然我正在查看一些Rails示例代码,但我发现以下示例我并不完全理解。 例如: @post = Post.find(params[:id]) 为什么它使用此语法访问id属性,而不是: @post = Post.find(params[id]) 或者,例如: @posts = Post.find(:all) 是:all这里一直:all不变? 如果没有,这段代码的真正含义是什么? 如果是,为什么不使用以下内容: @posts = Post.find(ALL) 谢谢

Ruby Koans#75 test_constants_become_symbols,正确答案?

我的问题建立在这个问题的基础上: Ruby Koan:常数成为符号 。 我有以下代码: in_ruby_version(“mri”) do RubyConstant = “What is the sound of one hand clapping?” def test_constants_become_symbols all_symbols = Symbol.all_symbols assert_equal __, all_symbols.include?(__) end end 应该是正确的答案如下吗? assert_equal true, all_symbols.include?(“RubyConstant”.to_sym) 我知道我不应该这样做: assert_equal true, all_symbols.include?(:RubyConstant) 因为那时我可以放任何东西,它仍然是真的 assert_equal true, all_symbols.include?(:DoesNotMatter) 提前道歉,问一个简单的“是或否”问题。 我很好奇知道“正确”的答案是什么。 我宁愿在上面提到的上一篇文章的评论中提出这个问题,但我不能不另外发表一篇文章。

如何访问Ruby中的符号表?

有没有办法访问Ruby中符号表中的所有内容? 我希望能够序列化或以其他方式保存程序运行的当前状态。 为此,我似乎需要能够遍历范围内的所有变量。

Ruby中的符号和变量有什​​么区别?

我试图理解符号和ruby中的变量之间的区别。 在给出引用对象的名称时,它们似乎完全相同。 我已经读过这些符号可用于更快的程序,但我不确定它们为何或如何以任何方式与变量不同。

Ruby符号不是垃圾收集的!? 那么,使用String不是更好吗?

如果在循环中创建10,000个字符串,则必须进行大量垃圾收集,这会占用大量资源。 如果对符号执行相同的操作,则会创建无法进行垃圾回收的对象。 哪个更糟?

使用符号作为ruby方法的参数

我正在学习rails并回到ruby来了解rails中的方法(以及ruby真正起作用)。 当我看到方法调用时: validates validates :first_name, :presence => true 我有点迷惑不解了。 你如何在ruby中编写接受符号或哈希的方法。 validation方法的源代码也令人困惑。 有人可以简化这个主题,在我的ruby类和实例方法中使用符号作为参数吗? 更新: 好的@Dave! 但我尝试的是: def full_name (:first_name, :last_name) @first_name = :first_name @last_name = :last_name p “#{@first_name} #{last_name}” end full_name(“Breta”, “Von Sustern”) 这显然会引发错误。 我试图理解:如果符号像任何其他值一样,为什么将这样的符号作为参数传递错误?

ruby符号(语法)包含什么?

我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么。 到现在为止,我知道以下内容: :’string’ :”string” :__underline :method :exclamation! :question? :@instance :$global

为什么符号不是冻结的字符串?

我理解字符串和符号之间的理论差异。 我理解符号用于表示概念或名称或标识符或标签或键,而字符串是一个字符包。 我知道字符串是可变的和瞬态的,其中符号是不可变的和永久的。 我甚至喜欢在文本编辑器中Symbols与Strings的区别。 困扰我的是,实际上,Symbols与Strings非常相似,因为它们没有被实现为Strings,这会引起很多麻烦。 他们甚至不支持鸭子打字或隐式强制,不像其他着名的“相同但不同”的夫妻,Float和Fixnum。 当然,最大的问题是从其他地方进入Ruby的哈希,比如JSON和HTTP CGI,使用字符串键而不是符号键,因此Ruby程序必须向后弯曲才能在前面或在查找时进行转换。 HashWithIndifferentAccess存在,以及它在Rails和其他框架中的猖獗使用,表明这里存在一个问题,需要抓一点痒。 谁能告诉我为什么Symbols不应该被冻结的实际原因? 除了“因为它总是如何完成”(历史)或“因为符号不是字符串”(乞求问题)。 考虑以下令人惊讶的行为: :apple == “apple” #=> false, should be true :apple.hash == “apple”.hash #=> false, should be true {apples: 10}[“apples”] #=> nil, should be 10 {“apples” => 10}[:apples] #=> nil, should be 10 :apple.object_id == “apple”.object_id #=> false, but that’s actually fine 只需要让下一代Rubyists不那么困惑就可以了: class Symbol […]

Rails:ParameterFilter :: compiled_filter尝试复制符号

我正在运行带有rails exception-notifier gem的rails3。 当发生exception,并且应该发送电子邮件时,我从ParameterFilter类中获得exception。 我在rails源中发现了这个问题,我不确定最好的方法。 问题发生在ActionDispatch :: Http :: ParameterFilter中。 在compiled_filter方法中,第38行发生错误: key = key.dup当key是符号时,因为符号不可复制。 这是来源: def compiled_filter … elsif blocks.present? key = key.dup value = value.dup if value.duplicable? blocks.each { |b| b.call(key, value) } end 我看到它们只有在可duplicable时才调用dup value 。 如果我修补源只能在key可duplicable时调用key ,那么我的问题就会消失。 我假设有一个原因让作者把这个条件放在value而不是key ,所以我很好奇是否有人对这个代码有了更好的理解。 只有在application.rb中向filter参数添加块时才会出现此错误。 所以,也许我的原始问题有一个解决方法,不需要在这里使用块。 如果您有兴趣,请参阅我的同事的问题Rails:从日志中过滤JSON参数中的敏感数据 这是一个问题的关键是:action 。 这来自rails,我不知道是否有任何方法可以强制它成为字符串。 我提交了一个rails bug https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter我准备好了补丁,如果key.duplicable? 到key.dup行,我正在寻找关于这是否是正确解决方案的输入。