2017-02-18 37 views
3

У меня есть пара вопросов относительно Джулии. Я сделал онлайн-рытье, но не смог найти ответа. Если у меня есть файл nameA.jl, у которого есть много переменных (например, физические константы, такие как масса протона), как я могу легко экспортировать/вызывать все эти переменные, когда мне нужно использовать в другом файле (т. Е. , nameB.jl).Julia: Как я могу исследовать все переменные файла A в файл B?

Во-вторых, что является лучшим способом создать какую-то «глобальную» переменную через «класс» (я знаю, что у Джулии нет концепции класса, аналогичной Python) или другого среднего, поэтому я могу легко получить доступ к любому другому файл в проекте и изменить, поскольку мне нужно.

Я попытался получить эти ответы от Google, но не смог найти никакой помощи.

Спасибо

ответ

3

К вашему первому вопросу:

PhysicalConstants.jl

module PhysicalConstants 

export fine_structure_constant, proton_electron_massratio 

const fine_structure_constant = 7.2973525664e-3 
const proton_electron_massratio = 1836.15267247 

end # module 

UsePhysicalConstants.jl

importall PhysicalConstants 

this = fine_structure_constant * proton_electron_massratio 

# 13.399053416751173 

Как я понимаю, ваш второй вопрос:

ChangeableValues.jl

module ChangeableValues 

export changeable_value, change_value, value 

type Changeable{T} 
    value::T 
end 

typeof_value{T}(x::Changeable{T}) = T 
value{T}(x::Changeable{T}) = x.value 

# changeable_value is const for speed 
# changeable_value.value is not const 
const changeable_value = Changeable(0) 

function change_value{T}(new_value::T) 
    if T == typeof_value(changeable_value) 
     changeable_value.value = new_value 
    else 
     throw(TypeError()) 
    end 
    return nothing 
end 


end # module 

UseChangeableValue.jl

import ChangeableValues: changeable_value, change_value, value 

    println("value = ", value(changeable_value)) # 0 
    change_value(1) 
    println("value = ", value(changeable_value)) # 1 
    change_value(2) 
    println("value = ", value(changeable_value)) # 2 

    # it remains 2 when imported elsewhere until it is changed again 
+0

По соображениям производительности, вы должны использовать 'Const changeable_value = переменчивый (0)'. Кроме того, нет необходимости проверять тип самостоятельно. 'changeable_value.value = 1.0' будет работать, а' changeable_value.value = 1.5' будет вызывать 'InexactError' – tim

+0

@Jeffrey: Большое спасибо. это было действительно полезно. У меня не было «экспорта» в файле PhysicalConstants.jl. – Curiosity

+0

@tim Спасибо. Я добавил 'const'. Я держу проверку типа, потому что это делает ситуацию более четкой при чтении. –