gpt4 book ai didi

Ruby 卡住方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:21 25 4
gpt4 key购买 nike

def track_for stat
# This is a hash with 2 elements of proc
{
symbol: -> { send(stat) },
array: -> { send(stat[0], stat[1]) }
}.freeze[stat.class.name.underscore.to_sym].call
end

freeze[stat.class.name.underscore.to_sym].call ,我不知道这段代码。 []里面的代码有什么作用,为什么要用call方法?谁能帮助我?非常感谢。

最佳答案

Ruby 的 Freeze 方法在不同的对象上完成以下操作,基本上它使对象在 ruby​​ 中保持不变或不可变。

  1. 字符串
str = "this is string"
str.freeze

str.replace("this is new string") #=> FrozenError (can't modify frozen String)
or
str[0] #=> 't'
str[0] = 'X' #=> FrozenError (can't modify frozen String)

但您可以分配新字符串或更改其引用。一旦引用发生变化,它就不是卡住(或常量)对象。

str = "this is string"
str.freeze
str.frozen? #=> true
str = "this is new string"
str.frozen? #=> false

  1. 数组:-
arr = ['a', 'b', 'c']
arr.freeze

arr << 'd' #=> FrozenError (can't modify frozen Array)
arr[0] = 'd' #=> FrozenError (can't modify frozen Array)
arr[1].replace('e') #=> ["a", "e", "c"]
arr.frozen? #=> true

arr 数组被卡住意味着你不能改变数组。但是数组中的字符串并没有被卡住。如果你做一个替换操作在字符串“one”上,调皮地把它变成“e”,当您重新检查(仍然卡住!)数组时,会显示字符串的新内容。

  1. 哈希
hash = {a: '1', b: '2'}
hash.freeze

hash[:c] = '3' #=> FrozenError (can't modify frozen Hash)
hash.replace({c: '3'}) #=> FrozenError (can't modify frozen Hash)
hash.merge({c: '3'}) #=> return new hash {:a=>"1", :b=>"2", :c=>"3"}
hash.merge!({c: '4'}) #=> FrozenError (can't modify frozen Hash)
hash.frozen? #=> true

hash = {:a=>"1", :b=>"2", :c=>"3"}
hash.frozen? #=> false

所以我们不能修改散列内容但是我们可以引用它到新的散列(就像数组一样)

关于Ruby 卡住方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com