Ruby'de {}
ve arasındaki fark []
nedir?
{}
hem kod blokları hem de karmalar için kullanılıyor gibi görünüyor.
Are []
sadece diziler için?
Belgeleme pek net değil.
Yanıtlar:
Bu koşullara bağlıdır:
Kendi başlarına veya bir değişkene []
atandığında, diziler {}
oluşturur ve karmalar oluşturur. Örneğin
a = [1,2,3] # an array
b = {1 => 2} # a hash
[]
Özel bir yöntem olarak geçersiz kılınan olabilir ve genellikle sağlamalarının şeyler almak için kullanılıyor (standart kütüphane kurar []
aynıdır sağlamalarının bir yöntem olarak fetch
)
aynı Sınıf yöntemi olarak kullanıldığını bir kongre de vardır static Create
C # veya Java'da bir yöntemi kullanmanın yolu . Örneğin
a = {1 => 2} # create a hash for example
puts a[1] # same as a.fetch(1), will print 2
Hash[1,2,3,4] # this is a custom class method which creates a new hash
Bu son örnek için Ruby Hash belgelerine bakın .
Bu muhtemelen en zor olanıdır -
{}
aynı zamanda bloklar için sözdizimidir, ancak yalnızca bir yönteme arguments parens DIŞINDA geçildiğinde.
Parantezler olmadan yöntemleri çağırdığınızda, Ruby argümanların nerede bittiğini bulmak için virgülleri nereye koyduğunuza bakar (parenlerin nerede olacağı, siz yazmış olsaydınız)
1.upto(2) { puts 'hello' } # it's a block
1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end
1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash
:c
bulunamadı
Çok açık olmayan başka bir kullanım, []
Proc # çağrısı ve Yöntem # çağrısının eşanlamlısıdır. Bununla ilk karşılaştığınızda biraz kafa karıştırıcı olabilir. Sanırım arkasındaki mantık, normal bir işlev çağrısı gibi görünmesini sağlaması.
Örneğin
proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)
proc["World"]
meth["Hello",","," ", "World!", "\n"]
Genel anlamda haklısın. Karmalara ek olarak, genel stil, küme parantezlerinin {}
genellikle birkaç satır arasında do
/ kullanmak yerine tümünü bir satıra sığdırabilen bloklar için kullanılmasıdır end
.
Köşeli parantezler []
String, BigNum, Dir ve kafa karıştırıcı bir şekilde Hash dahil olmak üzere birçok Ruby sınıfında sınıf yöntemi olarak kullanılır. Yani:
Hash["key" => "value"]
şu kadar geçerlidir:
{ "key" => "value" }
Köşeli parantezler [] dizileri başlatmak için kullanılır. [] Başlatıcı durumu için belgeler şurada
ri Array::[]
Küme parantezleri {}, karmaları başlatmak için kullanılır. {} Başlatıcı durumu için belgeler şurada
ri Hash::[]
Köşeli parantezler ayrıca Array, Hash, String ve diğerleri gibi birçok çekirdek yakut sınıfında bir yöntem olarak yaygın olarak kullanılır.
"[]" Yönteminin tanımlandığı tüm sınıfların listesine erişebilirsiniz.
ri []
çoğu yöntemin, bir şeyleri atamaya izin veren bir "[] =" yöntemi vardır, örneğin:
s = "hello world"
s[2] # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s # => "hemlo world"
Bloklarda "{...}" gibi "do ... end" yerine kıvrımlı parantezler de kullanılabilir.
Köşeli parantezleri veya süslü parantezleri görebileceğiniz başka bir durum, herhangi bir sembolün kullanılabileceği özel başlatıcılardadır, örneğin:
%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"
birkaç örnek:
[1, 2, 3].class
# => Array
[1, 2, 3][1]
# => 2
{ 1 => 2, 3 => 4 }.class
# => Hash
{ 1 => 2, 3 => 4 }[3]
# => 4
{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash
lambda { 1 + 2 }.class
# => Proc
lambda { 1 + 2 }.call
# => 3
[]
Kendi sınıflarınız için yöntemi tanımlayabileceğinizi unutmayın :
class A
def [](position)
# do something
end
def @rank.[]= key, val
# define the instance[a] = b method
end
end
@rank.
?