0
在Crystal編譯器的源代碼,我已經看到了這樣的代碼爲什麼在晶體中需要將實例變量賦值給局部變量?
def dirname
filename = @filename
if filename.is_a?(String)
File.dirname(filename)
else
nil
end
end
def original_filename
case filename = @filename
when String
filename
when VirtualFile
filename.expanded_location.try &.original_filename
else
nil
end
end
def <=>(other)
self_file = @filename
other_file = other.filename
if self_file.is_a?(String) && other_file.is_a?(String) && self_file == other_file
{@line_number, @column_number} <=> {other.line_number, other.column_number}
else
nil
end
end
那麼,什麼實例變量賦值給一個局部變量,而不是直接使用實例變量的原因是什麼?
有關此問題的更多討論,另請參閱https://github.com/manastech/crystal/issues/477。 –